按大小对索引处的值进行排序,同时不丢失结构信息



例如,我有 5 个数组。里面有随机数。现在我想知道 (5,6,4( 的哪个索引 a 的值最大。哪个第二大,哪个第三。

你知道怎么做吗?

import numpy as np
import random
a1 = np.random.rand(5,6,4)
a2 = np.random.rand(5,6,4)
a3 = np.random.rand(5,6,4)
a4 = np.random.rand(5,6,4)
a5 = np.random.rand(5,6,4)
list = [a1,a2,a3,a4,a5]
for i in list:

最后,我想有一个像 b1 这样的新数组,其维度为 (5,6,4(,每个索引处都有具有最大值的a_i。像 b1 = [[a2, a5, a3 ...], [a2, a2, a2, ..]] 和 b2 第二大。等等。

你有想法吗?

In [15]: a1=np.random.randint(0,10,(2,3,4))                                                    
In [16]: a2=np.random.randint(0,10,(2,3,4))                                                    
In [17]: a3=np.random.randint(0,10,(2,3,4))                                                    

将它们收集到一个数组中(在新轴上(,并沿新轴取最大值。

In [18]: aa = np.array([a1,a2,a3])                                                             
In [19]: aa                                                                                    
Out[19]: 
array([[[[6, 2, 1, 2],
[7, 6, 5, 2],
[0, 4, 2, 5]],
[[9, 1, 5, 3],
[2, 5, 0, 5],
[2, 2, 2, 7]]],

[[[5, 2, 7, 1],
[7, 7, 9, 8],
[6, 3, 2, 9]],
[[0, 1, 2, 3],
[0, 3, 6, 1],
[5, 2, 7, 9]]],

[[[1, 9, 3, 3],
[6, 5, 7, 4],
[8, 0, 4, 4]],
[[8, 1, 1, 8],
[8, 5, 4, 8],
[3, 3, 9, 0]]]])
In [20]: np.max(aa, axis=0)                                                                    
Out[20]: 
array([[[6, 9, 7, 3],
[7, 7, 9, 8],
[8, 4, 4, 9]],
[[9, 1, 5, 8],
[8, 5, 6, 8],
[5, 3, 9, 9]]])

我会让你检查值。

argmax告诉我们 3D 插槽中哪个阵列最大:

In [21]: np.argmax(aa, axis=0)                                                                 
Out[21]: 
array([[[0, 2, 1, 2],
[0, 1, 1, 1],
[2, 0, 2, 1]],
[[0, 0, 0, 2],
[2, 0, 1, 2],
[1, 2, 2, 1]]])

使用numpy maximum,这将在比较 2 个数组时返回每个位置的最大值,numpy minimum返回最小值。

import numpy as np
a1 = np.random.rand(5,6,4)
a2 = np.random.rand(5,6,4)
a3 = np.random.rand(5,6,4)
a4 = np.random.rand(5,6,4)
a5 = np.random.rand(5,6,4)
list = [a1,a2,a3,a4,a5]
# collect results
max_array = np.random.rand(5,6,4)
min_array = np.random.rand(5,6,4)
for i in range(0,4,1):
max_array = np.maximum(list[i], max_array)
min_array = np.minimum(list[i], min_array)

最新更新