【发布时间】:2018-02-08 20:09:53
【问题描述】:
我有两个 numpy 数组,每个数组的形状为 (10000,10000)。 一个是值数组,一个是索引数组。
Value=np.random.rand(10000,10000)
Index=np.random.randint(0,1000,(10000,10000))
我想通过对引用“索引数组”的所有“值数组”求和来创建一个列表(或 1D numpy 数组)。例如,对于每个索引 i,找到匹配的数组索引并将其作为参数传递给值数组
for i in range(1000):
NewArray[i] = np.sum(Value[np.where(Index==i)])
但是,这太慢了,因为我必须遍历 300,000 个数组。 我试图想出一些逻辑索引方法,例如
NewArray[Index] += Value[Index]
但它没有用。 我尝试的下一件事是使用字典
for k, v in list(zip(Index.flatten(),Value.flatten())):
NewDict[k].append(v)
和
for i in NewDict:
NewDict[i] = np.sum(NewDict[i])
但也很慢
有什么聪明的方法可以加快速度吗?
【问题讨论】:
标签: python arrays numpy optimization