【发布时间】:2018-12-08 02:49:27
【问题描述】:
假设我有一个大型 2D numpy 数组,例如1000x1000 个元素。我还有两个长度为 L 的一维整数数组和一个相同长度的浮点一维数组。如果我想根据整数数组简单地将浮点数分配到原始数组中的不同位置,我可以这样写:
mat = np.zeros((1000,1000))
int1 = np.random.randint(0,999,size=(50000,))
int2 = np.random.randint(0,999,size=(50000,))
f = np.random.rand(50000)
mat[int1,int2] = f
但是如果有冲突,即多个浮点数对应于单个位置,除了最后一个之外的所有浮点数都将被覆盖。有没有办法以某种方式聚合所有的碰撞,例如落在同一位置的所有花车的平均值或中位数?我想利用矢量化并希望避免解释器循环。
谢谢!
【问题讨论】:
-
考虑
ufunc.at方法,例如np.add.at indexing with array -
如果你想要平均值并且没有条目可以更新的最大次数,你需要一个 3D 数组来存储所有值,然后在最后取平均值。跨度>