4

私は次のdtypeを作成しました:

mytype = np.dtype([('a',np.uint8), ('b',np.uint8), ('c',np.uint8)])

したがって、このdtypeを使用する配列:

test1 = np.zeros(3, dtype=mytype)

test1 は次のとおりです。

array([(0, 0, 0), (0, 0, 0), (0, 0, 0)],
      dtype=[('a', '|u1'), ('b', '|u1'), ('c', '|u1')])

今、私はtest2を持っています:

test2 = np.array([[1,2,3], [4,5,6], [7,8,9]])

を使用するtest2.astype(mytype)と、結果は私が望むものではありません。

array([[(1, 1, 1), (2, 2, 2), (3, 3, 3)],
       [(4, 4, 4), (5, 5, 5), (6, 6, 6)],
       [(7, 7, 7), (8, 8, 8), (9, 9, 9)]],
      dtype=[('a', '|u1'), ('b', '|u1'), ('c', '|u1')])

結果を次のようにしたい:

array([(1, 2, 3), (4, 5, 6), (7, 8, 9)],
      dtype=[('a', '|u1'), ('b', '|u1'), ('c', '|u1')])

何か方法はありますか?ありがとう。

4

3 に答える 3

5

fromarraysnumpy.core.recordsのメソッドを使用できます(ドキュメントを参照):

np.rec.fromarrays(test2.T, mytype)
Out[13]: 
rec.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], 
      dtype=[('a', '|u1'), ('b', '|u1'), ('c', '|u1')])

関数は出力で配列の行を構造化配列の列と見なすため、配列を最初に転置する必要があります。この質問も参照してください: 2D numpy 配列を構造化配列に変換する

于 2011-10-04T07:48:08.207 に答える