gpt4 book ai didi

python - 求和和删除 Numpy 数组的重复元素

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:39 24 4
gpt4 key购买 nike

我有 4 个等长的一维 Numpy 数组。前三个充当 ID,唯一标识第 4 个数组。

ID 数组包含重复组合,为此我需要对第 4 个数组求和,并从所有 4 个数组中删除重复元素。

x = np.array([1, 2, 4, 1])
y = np.array([1, 1, 4, 1])
z = np.array([1, 2, 2, 1])
data = np.array([4, 7, 3, 2])

在这种情况下我需要:

x = [1, 2, 4]
y = [1, 1, 4]
z = [1, 2, 2]
data = [6, 7, 3]

数组相当长,所以循环真的行不通。我敢肯定有一个相当简单的方法可以做到这一点,但对于我的生活我无法弄清楚。

最佳答案

首先,我们可以将 ID 向量堆叠到一个矩阵中,这样每个 ID 都是一行三个值:

XYZ = np.vstack((x,y,z)).T

现在,我们只需要找到重复行的索引。不幸的是,np.unique 不对行进行操作,因此我们需要 do some tricks :

order = np.lexsort(XYZ.T)
diff = np.diff(XYZ[order], axis=0)
uniq_mask = np.append(True, (diff != 0).any(axis=1))

这部分借自np.unique source code ,并找到唯一索引以及“反向索引”映射:

uniq_inds = order[uniq_mask]
inv_idx = np.zeros_like(order)
inv_idx[order] = np.cumsum(uniq_mask) - 1

最后,对唯一索引求和:

data = np.bincount(inv_idx, weights=data)
x,y,z = XYZ[uniq_inds].T

关于python - 求和和删除 Numpy 数组的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787991/

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