私はディスプレイがタプルのリストが表示されていることを、あなたのDTYPE
In [548]: dt=np.dtype([('MSFT','float'),('CSCO','float'),('GOOG','float') ])
In [549]: A = np.zeros(3, dtype=dt)
In [550]: A
Out[550]:
array([(0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (0.0, 0.0, 0.0)],
dtype=[('MSFT', '<f8'), ('CSCO', '<f8'), ('GOOG', '<f8')])
通知にゼロの配列を作ります。これは意図的なことで、2d(普通の)配列の行からdtype
レコードを区別するためです。
つまり、配列を作成するときや値を割り当てるときには、タプルのリストも使用する必要があります。
In [554]: ll = np.arange(9).reshape(3,3).tolist()
In [555]: ll
In [556]: A[:]=ll
...
TypeError: a bytes-like object is required, not 'list'
を私はタプルのリストにそれを回す場合:
例えば者は、リストのリストを作ってみよう
In [557]: llt = [tuple(i) for i in ll]
In [558]: llt
Out[558]: [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
In [559]: A[:]=llt
In [560]: A
Out[560]:
array([(0.0, 1.0, 2.0), (3.0, 4.0, 5.0), (6.0, 7.0, 8.0)],
dtype=[('MSFT', '<f8'), ('CSCO', '<f8'), ('GOOG', '<f8')])
割り当てが正常に動作します。このリストはarray
で直接使用することもできます。
In [563]: A[0]=(10,12,14)
設定値の他の一般的な方法は、フィールド単位でフィールドである:一つのレコードに
In [561]: np.array(llt, dtype=dt)
Out[561]:
array([(0.0, 1.0, 2.0), (3.0, 4.0, 5.0), (6.0, 7.0, 8.0)],
dtype=[('MSFT', '<f8'), ('CSCO', '<f8'), ('GOOG', '<f8')])
同様に代入値がないリスト、タプルを必要とします。それは、リストや配列で行うことができます。他の回答で推奨
In [564]: A['MSFT']=[100,200,300]
In [565]: A
Out[565]:
array([(100.0, 12.0, 14.0), (200.0, 4.0, 5.0), (300.0, 7.0, 8.0)],
dtype=[('MSFT', '<f8'), ('CSCO', '<f8'), ('GOOG', '<f8')])
np.rec.fromarrays
方法は、コピー・バイ・フィールドのアプローチを使用して終わります。
arrayList = [sb.asarray(x) for x in arrayList]
<determine shape>
<determine dtype>
_array = recarray(shape, descr)
# populate the record array (makes a copy)
for i in range(len(arrayList)):
_array[_names[i]] = arrayList[i]
'rec.fromarrays'は、構造化配列を塗りつぶすcopy-by-fieldsメソッドを使用するのは興味深いことです。 – hpaulj