あなたは、化合物のDTYPEを定義することができます。
dt = np.dtype([('values',float,(41,)),('labels','S10')])
data=np.genfromtxt(f, delimiters=',',dtype=dt)
X = data['values']
Y = data['labels']
(私はサンプルの配列にこのサイズを持っていないので、テストされていません)。
そして、私は最近の答えで説明として、https://stackoverflow.com/a/37126091/901925、
それはすべての数字は、フロートとしてロードされている必要がありますけれども、あなたが
data.view(dt)
で、この化合物のDTYPEにdtype=None
データを変換することができ(またはすべてint)。多くの場合、CSVには浮動小数点列と整数列が混在しているため、None genfromtxt
呼び出しの数値フィールドには複数のタイプが混在しています。異なるdtypesと
In [421]: data=np.array([('label1', 12, 23.2, 232.0), ('label2', 23, 2324.0, 324.0),
('label3', 34, 123.0, 2141.0), ('label4', 0, 2.0, 3.0)],
dtype=[('f0', '<U10'), ('f1', '<i4'), ('f2', '<f8'), ('f3', '<f8')])
4フィールド:他の答えからの借入
、一般的な構造化された配列は、次のようになります。
個々のフィールドには、名前data['f0']
または名前data[['f0','f3']]
の名前でアクセスできます。しかし、名前のリストでできることは限られています。
In [426]: data[['f2','f3']]=10
...
ValueError: multi-field assignment is not supported
あなたはそれをのように均質な配列見る場合は、あなたがコピーを作成する場合は複数の操作を行い、そしてより多くのことができます。
In [427]: d23=data[['f2','f3']].copy()
In [428]: d23
Out[428]:
array([(23.2, 232.0), (2324.0, 324.0), (123.0, 2141.0), (2.0, 3.0)],
dtype=[('f2', '<f8'), ('f3', '<f8')])
In [429]: d23=d23.view((float,(2,)))
In [430]: d23
Out[430]:
array([[ 2.32000000e+01, 2.32000000e+02],
[ 2.32400000e+03, 3.24000000e+02],
[ 1.23000000e+02, 2.14100000e+03],
[ 2.00000000e+00, 3.00000000e+00]])
In [431]: d23+=34
In [432]: d23
Out[432]:
array([[ 57.2, 266. ],
[ 2358. , 358. ],
[ 157. , 2175. ],
[ 36. , 37. ]])
(d23
への変更は、元のdata
に影響を与えませんが)。
また、41の機能も同質ではありません(そのうちのいくつかは文字列です)。 – Gil
'dtype = None'で生成された構造化配列にアクセスする例をいくつか追加しました。 – hpaulj
ありがとう@hpaulj!代わりにfor-loopを使ってリストのリストを作成し(ある時点でrawを渡す)、それをnparrayに変換すればどうなると思いますか?さまざまなタイプのフィールドでうまく動作しますか? – Gil