2011-10-04 71 views
4

我由D型細胞是:如何將nndarray的dtype更改爲numpy中的自定義dtype?

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

,因此使用此D型細胞陣列:

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]]) 

Wh恩我用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')]) 

有什麼辦法?謝謝。

回答

5

可以使用numpy.core.records的fromarrays方法(參見documentation):

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')]) 

陣列具有被第一transposd因爲這些功能關於陣列的行作爲結構化的列數組在輸出中。也看到這個問題:Converting a 2D numpy array to a structured array

0

因爲所有的領域都是同一類型,也可以使用:

>>> test2.astype(np.uint8).view(mytype).squeeze(axis=-1) 
array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], 
     dtype=[('a', 'u1'), ('b', 'u1'), ('c', 'u1')]) 

需要擠壓因爲test2是2D的,但你想要一個1D結果

相關問題