gpt4 book ai didi

python - Numpy 对 4d 数组中的行进行排序并对相同的值求和

转载 作者:行者123 更新时间:2023-11-28 22:15:30 24 4
gpt4 key购买 nike

我有一个看起来像这样的数组

4.9 6.14923e-01 -4.7827e-01 -6.8341e+00
1.2 -4.7827e-01 -3.4162e-01 -7.9249e+00
3.4 -4.7827e-01 -6.1492e-01 -6.8341e+00
6.8 -4.7827e-01 -4.7827e-01 -7.4221e+00
5.2 6.14923e-01 -4.7827e-01 -6.8341e+00
1.4 -4.7827e-01 -3.4162e-01 -7.9249e+00
2.6 -4.7827e-01 -3.4162e-01 -6.9302e+00
2.8 -4.7827e-01 -6.1492e-01 -6.8341e+00
5.6 -4.7827e-01 -3.4162e-01 -6.9302e+00
4.1 -4.7827e-01 -4.7827e-01 -7.4221e+00
2.2 -4.7827e-01 -3.4162e-01 -6.9302e+00

最后三列是坐标 (x, y, z)。

所以我基本上想为每个重复值 ox x、y 和 z 求和第一列中的值。

排序后的输出是这样的:

2.8 -4.7827e-01 -6.1492e-01 -6.8341e+00
3.4 -4.7827e-01 -6.1492e-01 -6.8341e+00
6.8 -4.7827e-01 -4.7827e-01 -7.4221e+00
4.1 -4.7827e-01 -4.7827e-01 -7.4221e+00
1.2 -4.7827e-01 -3.4162e-01 -7.9249e+00
1.4 -4.7827e-01 -3.4162e-01 -7.9249e+00
2.6 -4.7827e-01 -3.4162e-01 -6.9302e+00
5.6 -4.7827e-01 -3.4162e-01 -6.9302e+00
2.2 -4.7827e-01 -3.4162e-01 -6.9302e+00
5.2 6.14923e-01 -4.7827e-01 -6.8341e+00
4.9 6.14923e-01 -4.7827e-01 -6.8341e+00

并且在对每个唯一值的第一列求和之后

6.2  -4.7827e-01 -6.1492e-01 -6.8341e+00
10.9 -4.7827e-01 -4.7827e-01 -7.4221e+00
2.6 -4.7827e-01 -3.4162e-01 -7.9249e+00
10.4 -4.7827e-01 -3.4162e-01 -6.9302e+00
10.1 6.14923e-01 -4.7827e-01 -6.8341e+00

最佳答案

您可以使用 scipy.sparse.csr_matrix 实现类似于 groupby 的行为。但是,这需要一些工作,因为稀疏不能很好地处理您想要分组的三列。

但是,我们可以使用 np.unique 来返回唯一值,以及相反,这样我们就可以将三列变成一个 1D 数组,而仍然保存多列以在最后重新添加:


from scipy import sparse

v, bins = np.unique(a[:, 1:], axis=0, return_inverse=True)
vals = a[:, 0]

out = sparse.csr_matrix(
(vals, bins, np.arange(vals.shape[0]+1)), (vals.shape[0], bins.max()+1)
).sum(0).A1

np.column_stack((out, v))

array([[ 6.2     , -0.47827 , -0.61492 , -6.8341  ],
[10.9 , -0.47827 , -0.47827 , -7.4221 ],
[ 2.6 , -0.47827 , -0.34162 , -7.9249 ],
[10.4 , -0.47827 , -0.34162 , -6.9302 ],
[10.1 , 0.614923, -0.47827 , -6.8341 ]])

关于python - Numpy 对 4d 数组中的行进行排序并对相同的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52841479/

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