我有一个结构化的 numpy 数组,我想使用 recfunctions 库 http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html 函数 append_fields() 或 rec_append_fields() 附加一个具有某种形状的字段. 但是,我收到一个错误:
ValueError:操作数无法与形状一起广播 (10) (10,3)
其中10
是我现有数组的长度,(3,)
是我要附加的字段的形状。
例如:
import numpy as np
from numpy.lib.recfunctions import append_fields
my_structured_array = np.array(
zip([0,1,2,3],[[4.3,3.2],[1.4,5.6],[6.,2.5],[4.5,5.4]]),
dtype=[('id','int8'),('pos','2float16')]
)
my_new_field = np.ones(
len(my_structured_array),
dtype='2int8'
)
my_appended_array = append_fields(
my_structured_array,
'new',
data=my_new_field
)
ValueError:操作数无法与形状一起广播 (4) (4,2)
有任何想法吗?我尝试制作my_new_field
一个元组列表并将具有适当形状的 dtype 参数放入 append_fields():
my_new_field = len(my_structured_array)*[(1,1)]
my_appended_array = append_fields(
my_structured_array,
'new',
data=my_new_field,
dtype='2int8'
)
但是一旦它被转换为一个 numpy 数组,结果似乎是一样的。
当我使用 rec_append_fields() 而不是简单的 append_fields() 时,这一切似乎都没有改变
编辑:鉴于我的新字段与我的数组的形状不同,我想我想要的附加是不可能的,@radicalbiscuit建议。
In : my_new_field.shape
Out: (4, 2)
In : my_structured_array.shape
Out: (4,)
但是,我在数组中包含了一个形状与原始数组不同的原始字段来说明我的观点,即字段不必具有与结构化数组相同的形状。我怎样才能附加这样的字段?
In : my_structured_array['pos'].shape
Out: (4, 2)
In : my_new_field.shape
Out: (4, 2)
我应该注意,对于我的应用程序,只要以后可以以某种方式更改形状,我就可以附加一个空字段。谢谢!