【发布时间】:2013-08-18 21:05:41
【问题描述】:
我想在 Python 中找到一种快速的方法(没有 for 循环)来分配数组的重复索引。 这是使用 for 循环的预期结果:
import numpy as np
a=np.arange(9, dtype=np.float64).reshape((3,3))
# The array indices: [2,3,4] are identical.
Px = np.uint64(np.array([0,1,1,1,2]))
Py = np.uint64(np.array([0,0,0,0,0]))
# The array to be added at the array indices (may also contain random numbers).
x = np.array([.1,.1,.1,.1,.1])
for m in np.arange(len(x)):
a[Px[m]][Py[m]] += x
print a
%[[ 0.1 1. 2.]
%[ 3.3 4. 5.]
%[ 6.1 7. 8.]]
当我尝试在索引Px,Py 处将x 添加到a 时,我显然没有得到相同的结果(3.3 与 3.1):
a[Px,Py] += x
print a
%[[ 0.1 1. 2.]
%[ 3.1 4. 5.]
%[ 6.1 7. 8.]]
有没有办法用 numpy 做到这一点?谢谢。
【问题讨论】:
-
首先,我会将这些值组合在一起,这样您就有了一个元组列表 (Px,Py)。然后对该列表进行排序,计算出现次数,将 x 乘以该数字并添加到数组中。但不知何故 numpy 似乎跳过了双重输入....奇怪。
标签: python arrays numpy indices