我需要向numpy rec陣列添加一列數據。我見過很多答案飄在這裏,但他們似乎並不爲僅包含一個排REC陣列工作...將數據列添加到只有一行的numpy rec陣列中
比方說,我有一個REC陣列x
:
>>> x = np.rec.array([1, 2, 3])
>>> print(x)
rec.array((1, 2, 3),
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8')])
和我要值4
追加到與它自己的字段名稱和數據類型的新列,如
rec.array((1, 2, 3, 4),
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<i8')])
如果我嘗試使用正常append_fields
方法來添加一列;
>>> np.lib.recfunctions.append_fields(x, 'f3', 4, dtypes='<i8',
usemask=False, asrecarray=True)
然後我最終結束了
TypeError: len() of unsized object
事實證明,對於只有一個排REC陣列,len(x)
不起作用,而x.size
一樣。如果我改用np.hstack()
,我得到TypeError: invalid type promotion
,如果我嘗試np.c_
,我得到一個令人失望的結果
>>> np.c_[x, 4]
array([[(1, 2, 3), (4, 4, 4)]],
dtype=(numpy.record, [('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8')]))
問題不在於'x'的維度,而是'4'的維度。 'rf.append_fields(x,'f3',[4],usemask = False)' – hpaulj
@hpaulj你真的嘗試過嗎?沒什麼區別。我仍然得到一個'TypeError'。如果numpy函數的源代碼調用'len(x)'和'len(x)'拋出一個錯誤,那麼解決方法就是改變'4'就那麼簡單。 – Anonymous
對不起,我的'x'是'(1,)'。 'x = np.rec.array([(1,2,3)])',我的一般印象是'recfunctions'有問題,並且沒有積極開發。我不止一次推薦直接使用結構化數組。 – hpaulj