Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两个numpy阵列上的快速迭代_Python_Python 3.x_Numpy - Fatal编程技术网

Python 两个numpy阵列上的快速迭代

Python 两个numpy阵列上的快速迭代,python,python-3.x,numpy,Python,Python 3.x,Numpy,我正在尝试用python实现以下问题 我有两个1D numpy数组,包含从0到gridsize-1的索引(称为i1,i2)。 我还有一个带有数据的1D numpy数组(称为d)。 所有三个数组都具有相同的长度 带有索引的数组可以包含一个特定的索引对(称之为s1、s2) 多次 现在我需要两个将数据数组映射到2D数组(称为arr)以绘制它。 对于那些多次出现的索引对,我想取对应于这些索引的数据项的平均值 我尝试了以下代码(没有平均值) 到目前为止,代码仍在运行,但速度非常慢(阵列大小约为2秒,这是不

我正在尝试用python实现以下问题

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

带有索引的数组可以包含一个特定的索引对(称之为s1、s2) 多次

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

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

到目前为止,代码仍在运行,但速度非常慢(阵列大小约为2秒,这是不可接受的) 有没有加快速度的建议? 我认为问题在于数组中单个元素的访问。是否有一个内置的numpy函数来实现这一点

谢谢,,
迈克尔

在你的问题中,我将假设一些不完全清楚的事情

  • arr
    是二维形状:
    (gridsize,gridsize)
  • i1
    i2
    d
    都是一维的,长度相同
在这些条件下,您可以非常直接地使用numpy使用
i1
i2
直接切片
arr
,并将
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

请在代码中正确地重新定义变量。您的代码中没有
d
,那么
d.size
应该是什么意思?你写的代码到目前为止还有效。然后plz发布最小工作代码。您在for循环中的索引错误,我编辑了代码。如果定义了数组d、i1、i2,这是最简单的工作示例。我认为这种索引[a,b]比使用[a][b]索引来提取单个元素要快。我的意思是说,发布需要2秒的最小完整工作代码。编辑的代码不好<代码>d,
i1
i2
都未定义。此外,
arr
是一个形状数组
(1000000,)
。在
for
循环中,您将得到
索引器错误:数组的索引太多
@Bazingaa这就是为什么假设
d
为一维是的,它起作用了。回答这些你/我们必须做作业的问题真的很烦人。我承认,如果你还不是numpy ninja的话,找到正确的谷歌关键词来处理“numpy integer array indexing”可能有点困难。在大多数情况下,只需在谷歌上搜索错误信息就足够了。
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