为了提高速度,我想避免forloops。
我有一个图像阵列,看起来像:
image = np.zeros_like(np.zeros(shape=(480,640,1)),dtype=np.uint8)
以及具有以下类型的类型化np数组Events
dtype = [('x', '<f8'),('y', '<f8'),('grayVal','<u2')
其中“x”=图像数组的行,“y”=列
问题是:
如何将Events
中的grayVal
分配给image
中的所有x
和y
到目前为止,我尝试过(而且更多内容无法显示): For循环:
for event in Events:
image[event['y'],event['x']] = event['grayVal']
和索引
events['y'].shape
(98210,)
events['x'].shape
(98210,)
events['grayVal'].shape
(98210,)
image[np.ix_(events['y'],events['x'])] = events['grayVal']
由于出现错误消息,它无法正常工作:
ValueError: shape mismatch: value array of shape (98210,) could not be broadcast to indexing result of shape (98210,98210,1)
我错过了什么?谢谢你的帮助
让我们来看一个小例子,一个我们可以实际检查和使用的例子
创建结构化数组:
要检查索引,请创建一个漂亮的二维数组:
看看
ix_
产生的-2数组可以相互广播。A(5,1)和(1,5),向(5,5)广播:使用这些数组对
image
进行索引只是对值进行洗牌-结果仍然是一个2d数组:如果我们改为使用数组而不是使用
ix_
数组进行索引:这只是用
ix_
生成的数组的对角线。使用(n,)和(n,)数组进行索引会生成一个(n,)值数组(与ix_
(n,n)数组相反)因此,从零图像开始,我们可以通过以下方式分配值:
我现在只能想到一个慢版本,带有for循环。但是如果数组是稀疏的,那么这就可以了。也许其他人可以将其矢量化
输出:
相关问题 更多 >
编程相关推荐