gpt4 book ai didi

python - 如何将一个数组的顺序复制到另一个数组中? [Python]

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

我想将一个数组的值的顺序与另一个数组相匹配。例如,我有 A 和 B:

A = [239  1678  2678  4430  199]

订单 A:

A5 < A1 < A2 < A3 < A4

现在我的 B 列表是:

B = [ 4126.77552299  984.39685939  237.92397237  497.72447701  3377.17916825]

订单 B:

B3 < B4 < B2 < B5 < B1

我希望 B 与 A 的顺序相同,如下所示:

B = [ 497.72447701  984.39685939  3377.17916825  4126.77552299  237.92397237]

订单 B:

B5 < B1 < B2 < B3 < B4

A 和 B 是例子,在我的例子中,我有很多不同大小的向量元组。我需要一个通用表达式来根据另一个函数对一个向量进行排序。

我该怎么做?

最佳答案

我们按常规排序顺序对 B 进行排序:

sorted_B = sorted(B)

找到 sorted_B 的每个元素应该去哪里:

locations = sorted(range(len(A)), key=A.__getitem__)

并将这些元素放在结果中需要的位置:

result = [None]*len(B)
for i, elem in zip(locations, sorted_B):
result[i] = elem

这是一个 link演示显示这会为您的示例生成正确的输出。

如果您想将结果直接填回 B 而不是复制一份,您可以这样做:

sorted_B = sorted(B)
locations = sorted(range(len(A)), key=A.__getitem__)
for i, elem in zip(locations, sorted_B):
B[i] = elem

如果您在 NumPy 中工作并且这些是 NumPy 数组而不是列表,我们应该使用 NumPy 操作来完成这项工作:

sorted_B = numpy.sort(B)
locations = numpy.argsort(A)
result = numpy.empty_like(B)
result[locations] = sorted_B

或更少的行:

result = numpy.empty_like(B)
result[numpy.argsort(A)] = numpy.sort(B)

Demo

或者如果您想将结果填充到 B 而不是副本:

B[np.argsort(A)] = np.sort(B)

关于python - 如何将一个数组的顺序复制到另一个数组中? [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42055258/

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