【发布时间】:2018-08-03 13:16:29
【问题描述】:
我正在尝试两个在python中实现以下问题
我有两个 1D numpy 数组,其中包含从 0 到 gridsize-1 的索引(称为 i1,i2)。 我还有一个带有数据的一维 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]
到目前为止,代码运行良好,但速度很慢(数组大小大约需要 2 秒,这是不可接受的) 有什么建议可以加快速度吗? 我认为问题在于对数组中各个元素的访问。是否有内置的 numpy 函数可以做到这一点?
谢谢, 迈克尔
【问题讨论】:
-
请在您的代码中正确地重新定义变量。您的代码中没有
d那么d.size应该是什么意思?你写的代码到目前为止是有效的。然后请发布最小的工作代码。你在 for 循环中的索引也是错误的 -
我编辑了代码。如果定义了数组 d、i1、i2,这是最小的工作示例。我认为这种索引 [a,b] 比使用 [a][b] 索引提取单个元素要快
-
我的意思是发布需要 2s 的最小完整工作代码。编辑后的代码不好。
d、i1、i2都是未定义的。此外,arr是一个形状为(1000000,)的数组。在for循环内,您将获得IndexError: too many indices for array
标签: python python-3.x numpy