gpt4 book ai didi

沿列对 2D 数组进行排序的 Pythonic 且有效的方法

转载 作者:行者123 更新时间:2023-12-01 07:05:43 24 4
gpt4 key购买 nike

我有两个数组,其中 A 是一维的。 B 是一个二维数组(沿两个轴具有相同数量元素的方阵,与 A 中相同)。

我需要对 B 中的列进行排序,同时对 A 进行升序排序。以下代码有效,但我想知道是否可以在不使用分配给新数组和 for 循环的情况下完成。

寻找更有效的方法来完成同样的任务。谢谢。

import numpy as np

A=np.random.randint(1,50,6)
B=np.random.randint(1,50,(6,6))
print ("A = ",A,"\n \nB = \n", B)

ind = np.argsort(A, axis=0)
print("\nSorting index = \n",ind)

C=A[ind]
print("\nSorted A = \n",C)

D=np.empty_like(B)
for i in range(6):
D[:,i] = B[:,ind[i]]

print("\nSorted B along the columns = \n",D)

输出:

A =  [40  1 12 42 15  3] 

B =
[[43 20 26 15 24 13]
[36 7 47 14 36 11]
[44 19 41 32 14 43]
[27 11 46 44 35 22]
[26 18 4 40 40 23]
[27 23 30 49 28 12]]

Sorting index =
[1 5 2 4 0 3]

Sorted A =
[ 1 3 12 15 40 42]

Sorted B along the columns =
[[20 13 26 24 43 15]
[ 7 11 47 36 36 14]
[19 43 41 14 44 32]
[11 22 46 35 27 44]
[18 23 4 40 26 40]
[23 12 30 28 27 49]]

最佳答案

您肯定可以以矢量化方式切片到 B 中。您甚至可以在不临时创建索引数组的情况下执行此操作:

D = B[:,np.argsort(A, axis=0)]

更详细的输出

In [13]: A
Out[13]: array([40, 1, 12, 42, 15, 3])

In [14]: B
Out[14]:
array([[43, 20, 26, 15, 24, 13],
[36, 7, 47, 14, 36, 11],
[44, 19, 41, 32, 14, 43],
[27, 11, 46, 44, 35, 22],
[26, 18, 4, 40, 40, 23],
[27, 23, 30, 49, 28, 12]])

In [15]: D = B[:,np.argsort(A, axis=0)]

In [16]: D
Out[16]:
array([[20, 13, 26, 24, 43, 15],
[ 7, 11, 47, 36, 36, 14],
[19, 43, 41, 14, 44, 32],
[11, 22, 46, 35, 27, 44],
[18, 23, 4, 40, 26, 40],
[23, 12, 30, 28, 27, 49]])

关于沿列对 2D 数组进行排序的 Pythonic 且有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58460439/

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