【发布时间】:2012-12-10 05:17:53
【问题描述】:
我有一个结构化的 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)
我应该注意,对于我的应用程序,我可以附加一个空字段,只要以后可以以某种方式更改形状即可。谢谢!
【问题讨论】: