我使用numpy创建了一个结构化数组。每个结构代表一个像素的rgb值。
我正在尝试研究如何从函数中填充数组,但我不断收到“预期的可读缓冲区对象”错误。
我可以从我的函数中设置单个值,但是当我尝试使用'fromfunction'时它会失败。
我从控制台复制了dtype。
任何人都可以指出我的错误吗?
我是否必须使用3维数组而不是2d结构
import numpy as np
#define structured array
pixel_output = np.zeros((4,2),dtype=('uint8,uint8,uint8'))
#print dtype
print pixel_output.dtype
#function to create structure
def testfunc(x,y):
return (x,y,x*y)
#I can fill one index of my array from the function.....
pixel_output[(0,0)]=testfunc(2,2)
#But I can't fill the whole array from the function
pixel_output = np.fromfunction(testfunc,(4,2),dtype=[('f0', '|u1'), ('f1', '|u1'), ('f2', '|u1')])
答案 0 :(得分:1)
X=np.fromfunction(testfunc,(4,2))
pixel_output['f0']=X[0]
pixel_output['f1']=X[1]
pixel_output['f2']=X[2]
print pixel_output
产生
array([[(0, 0, 0), (0, 1, 0)],
[(1, 0, 0), (1, 1, 1)],
[(2, 0, 0), (2, 1, 2)],
[(3, 0, 0), (3, 1, 3)]],
dtype=[('f0', 'u1'), ('f1', 'u1'), ('f2', 'u1')])
fromfunction
返回(4,2)
数组的3个元素列表。我依次将每一个分配给pixel_output
的3个字段。我会把这种概括留给你。
另一种方式(将元组分配给元素)
for i in range(4):
for j in range(2):
pixel_output[i,j]=testfunc(i,j)
pixel_output[:]=np.core.records.fromarrays(X)
当我查看fromarrays
代码(使用Ipython ??)时,我发现它正在做我最初做的事情 - 按字段分配字段。
for i in range(len(arrayList)):
_array[_names[i]] = arrayList[i]