gpt4 book ai didi

python - 在 Python/Numpy 中一次分配相同的数组索引

转载 作者:太空狗 更新时间:2023-10-29 22:30:56 26 4
gpt4 key购买 nike

我想在 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 vs. 3.1):

a[Px,Py] += x
print a
%[[ 0.1 1. 2.]
%[ 3.1 4. 5.]
%[ 6.1 7. 8.]]

有没有办法用 numpy 做到这一点?谢谢。

最佳答案

是的,可以做到,但有点棘手:

# convert yourmulti-dim indices to flat indices
flat_idx = np.ravel_multi_index((Px, Py), dims=a.shape)
# extract the unique indices and their position
unique_idx, idx_idx = np.unique(flat_idx, return_inverse=True)
# Aggregate the repeated indices
deltas = np.bincount(idx_idx, weights=x)
# Sum them to your array
a.flat[unique_idx] += deltas

关于python - 在 Python/Numpy 中一次分配相同的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18273634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com