[此文章的早期版本的標題不準確「如何將一列添加到numpy記錄數組?」問題在早期標題已部分answered,但這個答案不是什麼機構這個帖子的早期版本所要求的。我重寫了這個標題,並且對這個帖子進行了大量編輯,以使區分更加清晰。我也解釋了爲什麼我剛纔提到的答案達不到的東西我要找的。]如何堆疊numpy記錄的數組?
假設我有兩個numpy
陣列x
和y
,每組[R「記錄」(又名「結構化「)陣列。讓的x
形狀是(- [R,Ç X)和y
形狀是(- [R,Çý)。我們還假設x.dtype.names
和y.dtype.names
之間沒有重疊。
例如,對於- [R = 2,Ç X = 2,並且ÇŶ = 1:
import numpy as np
x = np.array(zip((1, 2), (3., 4.)), dtype=[('i', 'i4'), ('f', 'f4')])
y = np.array(zip(('a', 'b')), dtype=[('s', 'a10')])
我想 「水平」 串聯x
和y
產生新記錄數組z
,形狀(r,c x + c y)。此操作根本不應修改x
或y
。
一般來說,z = np.hstack((x, y))
不會做,因爲dtype
的在x
和y
不一定匹配。例如,繼續上面的例子:
z = np.hstack((x, y))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-def477e6c8bf> in <module>()
----> 1 z = np.hstack((x, y))
TypeError: invalid type promotion
現在,有一個功能,numpy.lib.recfunctions.append_fields
,那看起來像它可能做一些接近我正在尋找,但我沒有能夠從中得到任何東西:我嘗試過的所有事情要麼是失敗,要麼是產生的東西不是我想要得到的東西。
可有人請告訴我明確在上面的例子中定義的代碼(使用n.l.r.append_fields
或以其他方式),這將產生,從x
和y
,一個新陣列的記錄,z
,相當於x
和y
的橫向級聯,並且在不修改x
或y
的情況下這樣做?
我認爲這隻需要一行或兩行代碼。當然,我正在尋找不需要建築物z
的代碼,通過記錄來迭代x
和y
。此外,代碼可以假定x
和y
具有相同的記錄數,並且在x.dtype.names
和y.dtype.names
之間沒有重疊。除此之外,我正在尋找的代碼應該對x
和y
一無所知。理想情況下,它也應該是不可知論的數組加入。 IOW,遺漏了錯誤檢查,我正在尋找的代碼可能是函數的主體hstack_rec
,因此新陣列z
將會是結果hstack_rec((x, y))
。
...雖然我不得不承認,在我與numpy.lib.recfunctions.append_fields
失敗迄今爲止在完美的紀錄,我已經變得有點好奇如何此功能可用於在全部,不管它與這個職位的問題的相關性。
'當d = np.array([3.2],D型細胞= np.double) Z = rf.append_fields(X ,'field4',data = [d],dtypes = [np.double],usemask = False)' – 2013-10-16 18:24:10