例如,我有 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)