在两个Numpy数组上快速迭代

时间:2018-08-03 13:16:29

标签: python python-3.x numpy

我正在尝试两个在python中实现以下问题

我有两个一维numpy数组,包含从0到gridsize-1的索引(称为i1,i2)。 我也有一个带有数据的1D numpy数组(称为d)。 这三个数组的长度都相同。

具有索引的数组可以包含特定的索引对(称为s1,s2) 多次。

我现在想要两个将数据数组映射到2D数组(称为arr)以进行绘制。 对于那些出现多次的索引对,我想取这些索引对应的数据条目的平均值。

我尝试了以下代码(无平均值)

d #data array
i1 #first 1D numpy index array
i2 #second 1D numpy index array
gridsize = 1000
arr = np.zeros(gridsize**2)
for i in range(d.size):
    arr[ i1[i], i2[i] ] = d[i]

到目前为止,代码可以正常运行,但是非常慢(数组大小大约为2s,这是不可接受的) 有什么建议可以加快速度吗? 我建议问题出在数组中各个元素的访问上。可能有内置的numpy函数可以做到这一点吗?

谢谢你, 迈克尔

1 个答案:

答案 0 :(得分:0)

我将假设一些在您的问题中并不完全清楚的事情。

  • arr是二维的,形状为:(gridsize, gridsize)
  • i1 i2d均为一维且长度相同

鉴于这些条件,您可以直接使用numpy的integer array indexing通过arri1直接切片i2并将d分配给切片:

d #data array
i1 #first 1D numpy index array
i2 #second 1D numpy index array
gridsize = 1000
arr = np.zeros((gridsize,gridsize))
arr[i1,i2] = d