gpt4 book ai didi

python - 根据来自另一个数组的数据对 numpy 数组进行排序

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

我有两组数组dataresultresult 包含 data 中的相同元素,但有一个额外的列并且未排序。我想重新排列 result 数组,使其与 data 中的行顺序相同,同时将关联值与该行的其余部分一起放入最后一列在进行排序时。

data = np.array([[0,1,0,0],[1,0,0,0],[0,1,1,0],[0,1,0,1]])
result = np.array([[0,1,1,0,1],[1,0,0,0,0],[0,1,0,0,1],[0,1,0,1,0]])

# this is what the final sorted array should look like:
'''
array([[0, 1, 0, 0, 1],
[1, 0, 0, 0, 0],
[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0]])
'''

我已经尝试执行 argsort 以将 data 反转为排序顺序,然后将其应用于 result 但是 argsort 似乎根据每个元素对数组的顺序进行排序,而我希望排序将 data[:,4] 的每一行作为一个整体来处理。

ind = np.argsort(data)
indind =np.argsort(ind)
ind
array([[0, 2, 3, 1],
[1, 2, 3, 0],
[0, 3, 1, 2],
[0, 2, 1, 3]])

进行这种按行排序的好方法是什么?

最佳答案

numpy_indexed包(免责声明:我是它的作者)可以用来高效优雅地解决这类问题:

import numpy_indexed as npi
result[npi.indices(result[:, :-1], data)]

npi.indices 本质上是 list.index 的矢量化等价物;因此对于数据中的每个元素(行),我们得到同一行在结果中的位置,减去最后一列。

请注意,此解决方案适用于任意数量的列,并且是完全矢量化的(即,任何地方都没有 python 循环)。

关于python - 根据来自另一个数组的数据对 numpy 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36535673/

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