gpt4 book ai didi

python - 合并 Numpy 结构化数组中的记录

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:17 25 4
gpt4 key购买 nike

我有一个按第一列排序的 Numpy 结构化数组:

x = array([(2, 3), (2, 8), (4, 1)], dtype=[('recod', '<u8'), ('count', '<u4')])

我需要合并记录(对第二列的值求和)

x[n][0] == x[n + 1][0]

在这种情况下,所需的输出将是:

x = array([(2, 11), (4, 1)], dtype=[('recod', '<u8'), ('count', '<u4')])

实现此目标的最佳方法是什么?

最佳答案

您可以使用 np.unique为第一列中的每个元素获取一个 ID 数组,然后使用 np.bincount根据 ID 对第二列元素执行累加 -

In [140]: A
Out[140]:
array([[25, 1],
[37, 3],
[37, 2],
[47, 1],
[59, 2]])

In [141]: unqA,idx = np.unique(A[:,0],return_inverse=True)

In [142]: np.column_stack((unqA,np.bincount(idx,A[:,1])))
Out[142]:
array([[ 25., 1.],
[ 37., 5.],
[ 47., 1.],
[ 59., 2.]])

您可以使用 np.diff 的组合来避免 np.uniquenp.cumsum这可能会有所帮助,因为 np.unique 也在内部进行排序,在这种情况下不需要这样做,因为输入数据已经排序。实现看起来像这样 -

In [201]: A
Out[201]:
array([[25, 1],
[37, 3],
[37, 2],
[47, 1],
[59, 2]])

In [202]: unq1 = np.append(True,np.diff(A[:,0])!=0)

In [203]: np.column_stack((A[:,0][unq1],np.bincount(unq1.cumsum()-1,A[:,1])))
Out[203]:
array([[ 25., 1.],
[ 37., 5.],
[ 47., 1.],
[ 59., 2.]])

关于python - 合并 Numpy 结构化数组中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32008286/

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