我想用現有數組與幾個命名的字段,並創建一個新的數組(或改變它)與一個分層dtype等於原始dtype的字段。也就是說,添加層次結構到numpy結構化數組
newarray = np.array(oldarray, dtype=[('old',oldarray.dtype)])
這樣newarray['old']
的形狀和結構oldarray
這裏同樣是一個例子:
In [1]: import numpy as np
In [2]: dt = np.dtype([('name',np.str_,2),('val',np.float_)])
In [3]: constants = np.array([('pi',3.14),('e',2.72)],dtype=dt)
In [4]: constants
Out[4]:
array([('pi', 3.14), ('e', 2.72)],
dtype=[('name', '|S2'), ('val', '<f8')])
In [5]: numbers = constants.astype([('constants',dt)])
但是這給了我全部爲零:
In [6]: numbers
Out[6]:
array([(('', 0.0),), (('', 0.0),)],
dtype=[('constants', [('name', '|S2'), ('val', '<f8')])])
如果我嘗試複製副本,我也有同樣的問題:
In [7]: numbers = np.array(constants,dtype=[('constants',dt)])
In [8]: numbers
Out[8]:
array([(('', 0.0),), (('', 0.0),)],
dtype=[('constants', [('name', '|S2'), ('val', '<f8')])])
另外:有誰知道爲什麼這種情況發生?
謝謝@joris,這是完美的。使用視圖,我實際上可以通過這樣做來改變數組:'constants = constants.view([('constants',dt)])' – askewchan