从1D数组创建有序的2D数组



我想把一个1d数组变成一个有序的2d数组。1d数组看起来像这样:

[1,5,8,9,9,1,4,6,7,8,41,4,5,31,6,11]

首先,我想把这个数组分割成一个2d数组,宽度为4。

[[1,5,8,9]
[9,1,4,6]
[7,8,41,4]
[5,31,6,11]
]

然后,我想从2d数组中的第三个值对2d数组进行排序,如下所示:

[[9,1,4,6],
[5,31,6,11],
[1,5,8,9],
[7,8,41,4]
]

我预计1d数组将更大,所以我不想手动创建2d数组。我该怎么做呢?

如果你不能使用numpy,你可以这样做:

a = [1,5,8,9,9,1,4,6,7,8,41,4,5,31,6,11]
result = []
l = len(a)
for i in range(0, l, 4):
result.append(a[i:i+4])
result = sorted(result, key = lambda a: a[2])
# result is [[9, 1, 4, 6], [5, 31, 6, 11], [1, 5, 8, 9], [7, 8, 41, 4]]

你可以试试numpy array_split

import numpy as np
a=[1,5,8,9,9,1,4,6,7,8,41,4,5,31,6,11]
b=np.array_split(arr, len(a)/4)
for c in b:
c.sort()

如果使用numpy。Argsort,你可以很容易地排序。

import numpy as np
arr = np.array([1,5,8,9,9,1,4,6,7,8,41,4,5,31,6,11])
arr_2d = np.reshape(arr, (4,4))
sorted_arr = arr_2d[np.argsort(arr_2d[:, 2])]

最新更新