Python 如何在numpy中查找3d数组中的最小值和最大值,并对结果进行分组?
我有一个3D NumPy阵列,如下所示:Python 如何在numpy中查找3d数组中的最小值和最大值,并对结果进行分组?,python,arrays,numpy,numpy-ndarray,Python,Arrays,Numpy,Numpy Ndarray,我有一个3D NumPy阵列,如下所示: [[[4 1 5 2 5 5 7 8 9 7] [7 4 2 4 7 8 4 1 3 5] [6 1 2 1 1 1 2 3 7 6] [5 5 5 0 5 4 3 8 7 1] [2 8 6 7 4 7 5 5 5 1]] [[9 9 5 8 0 7 3 9 8 1] [9 1 9 5 7 4 5 4 7 0] [1 0 4 8 7 3 4 3 8 8] [8 1 3 1 7 0 9 9 3 8] [4 0 2 3
[[[4 1 5 2 5 5 7 8 9 7]
[7 4 2 4 7 8 4 1 3 5]
[6 1 2 1 1 1 2 3 7 6]
[5 5 5 0 5 4 3 8 7 1]
[2 8 6 7 4 7 5 5 5 1]]
[[9 9 5 8 0 7 3 9 8 1]
[9 1 9 5 7 4 5 4 7 0]
[1 0 4 8 7 3 4 3 8 8]
[8 1 3 1 7 0 9 9 3 8]
[4 0 2 3 8 2 0 1 2 4]]
[[1 6 2 4 4 0 2 3 0 3]
[9 6 8 6 6 5 6 9 4 1]
[0 4 0 2 9 1 1 2 4 6]
[6 1 9 9 7 8 9 7 6 8]
[9 3 9 0 7 0 0 0 7 0]]]
[[6]
[9]
[9]]
有了它,我想创建一个2d ndarray,如下所示:
[[[4 1 5 2 5 5 7 8 9 7]
[7 4 2 4 7 8 4 1 3 5]
[6 1 2 1 1 1 2 3 7 6]
[5 5 5 0 5 4 3 8 7 1]
[2 8 6 7 4 7 5 5 5 1]]
[[9 9 5 8 0 7 3 9 8 1]
[9 1 9 5 7 4 5 4 7 0]
[1 0 4 8 7 3 4 3 8 8]
[8 1 3 1 7 0 9 9 3 8]
[4 0 2 3 8 2 0 1 2 4]]
[[1 6 2 4 4 0 2 3 0 3]
[9 6 8 6 6 5 6 9 4 1]
[0 4 0 2 9 1 1 2 4 6]
[6 1 9 9 7 8 9 7 6 8]
[9 3 9 0 7 0 0 0 7 0]]]
[[6]
[9]
[9]]
其中,此二维数组的每个元素都是原始数组第三列的最大值:
a[:,:,2].max(1, keepdims=True)
我已经花了几个小时试图解决这个问题,但没有运气
我要求一个2d数组作为输出,因为我还有其他的计算要做,比如说,我还需要以类似的方式最小化第二列的值,但我想我可以从中推断出来
非常感谢您的指点 您是否尝试过以下方法:
import numpy as np
x = np.random.randint(0, 10, (3, 5, 10))
print(x)
maxes = x[:,:,2].max(axis=1)
print(maxes)
[[[5 0 6 6 4 7 5 0 4 8]
[0 6 8 8 2 1 7 5 4 3]
[2 7 5 5 0 2 6 8 6 3]
[5 9 7 5 1 1 5 4 8 7]
[0 2 3 7 8 1 9 1 2 6]]
[[8 9 4 3 3 6 0 4 9 1]
[1 5 6 4 3 2 7 7 0 2]
[3 2 0 1 9 6 5 8 0 5]
[6 1 5 9 1 6 4 7 4 5]
[7 2 5 8 6 8 5 1 9 5]]
[[9 4 0 9 0 6 3 7 4 1]
[4 1 4 9 1 1 1 2 0 6]
[7 3 3 2 5 2 0 6 9 1]
[1 7 0 1 8 1 3 8 6 4]
[6 9 0 2 6 0 2 1 7 7]]]
[8 6 4]
要了解这是如何工作的,请执行以下操作:
并且,要获得所有列的最大值:
col_maximums = x.max(axis=1)
print(col_maximums)
[[5 9 8 8 8 7 9 8 8 8]
[8 9 6 9 9 8 7 8 9 5]
[9 9 4 9 8 6 3 8 9 7]]
你试过这个吗:
import numpy as np
x = np.random.randint(0, 10, (3, 5, 10))
print(x)
maxes = x[:,:,2].max(axis=1)
print(maxes)
[[[5 0 6 6 4 7 5 0 4 8]
[0 6 8 8 2 1 7 5 4 3]
[2 7 5 5 0 2 6 8 6 3]
[5 9 7 5 1 1 5 4 8 7]
[0 2 3 7 8 1 9 1 2 6]]
[[8 9 4 3 3 6 0 4 9 1]
[1 5 6 4 3 2 7 7 0 2]
[3 2 0 1 9 6 5 8 0 5]
[6 1 5 9 1 6 4 7 4 5]
[7 2 5 8 6 8 5 1 9 5]]
[[9 4 0 9 0 6 3 7 4 1]
[4 1 4 9 1 1 1 2 0 6]
[7 3 3 2 5 2 0 6 9 1]
[1 7 0 1 8 1 3 8 6 4]
[6 9 0 2 6 0 2 1 7 7]]]
[8 6 4]
要了解这是如何工作的,请执行以下操作:
并且,要获得所有列的最大值:
col_maximums = x.max(axis=1)
print(col_maximums)
[[5 9 8 8 8 7 9 8 8 8]
[8 9 6 9 9 8 7 8 9 5]
[9 9 4 9 8 6 3 8 9 7]]
您需要做的是获取您想要的列。在这种情况下,它是arr[:,:,2]。这将具有3,5的形状。arr=np.maxarr[:,:,2],axis=-1然后生成所需形状为3的数组内容。然后,您可以调用arr=np.reformarr,3,1以获得所需的形状。您需要做的是获取所需的列。在这种情况下,它是arr[:,:,2]。这将具有3,5的形状。arr=np.maxarr[:,:,2],axis=-1然后生成所需形状为3的数组内容。然后,您可以调用arr=np.reformarr,3,1以获得所需的形状。下面我尝试一步一步地执行该操作,并在每次操作后打印该形状。 2是很重要的,以便保留尺寸并像您希望的那样保持二维,否则它会自动折叠单体尺寸
import numpy as np
a = np.array([
[[4, 1, 5, 2, 5, 5, 7, 8, 9, 7],
[7, 4, 2, 4, 7, 8, 4, 1, 3, 5],
[6, 1, 2, 1, 1, 1, 2, 3, 7, 6],
[5, 5, 5, 0, 5, 4, 3, 8, 7, 1],
[2, 8, 6, 7, 4, 7, 5, 5, 5, 1]],
[[9, 9, 5, 8, 0, 7, 3, 9, 8, 1],
[9, 1, 9, 5, 7, 4, 5, 4, 7, 0],
[1, 0, 4, 8, 7, 3, 4, 3, 8, 8],
[8, 1, 3, 1, 7, 0, 9, 9, 3, 8],
[4, 0, 2, 3, 8, 2, 0, 1, 2, 4]],
[[1, 6, 2, 4, 4, 0, 2, 3, 0, 3],
[9, 6, 8, 6, 6, 5, 6, 9, 4, 1],
[0, 4, 0, 2, 9, 1, 1, 2, 4, 6],
[6, 1, 9, 9, 7, 8, 9, 7, 6, 8],
[9, 3, 9, 0, 7, 0, 0, 0, 7, 0]]
])
print(a.shape) # --> (3, 5, 10)
col2 = a[:, :, (2,)]
print(col2.shape) # --> (3, 5, 1)
max_col2 = col2.max(axis=1)
print(max_col2.shape) # --> (3, 1)
print(max_col2) # -->
[[6]
[9]
[9]]
下面我试着一步一步地做这个操作,每次操作后都打印出形状。 2是很重要的,以便保留尺寸并像您希望的那样保持二维,否则它会自动折叠单体尺寸
import numpy as np
a = np.array([
[[4, 1, 5, 2, 5, 5, 7, 8, 9, 7],
[7, 4, 2, 4, 7, 8, 4, 1, 3, 5],
[6, 1, 2, 1, 1, 1, 2, 3, 7, 6],
[5, 5, 5, 0, 5, 4, 3, 8, 7, 1],
[2, 8, 6, 7, 4, 7, 5, 5, 5, 1]],
[[9, 9, 5, 8, 0, 7, 3, 9, 8, 1],
[9, 1, 9, 5, 7, 4, 5, 4, 7, 0],
[1, 0, 4, 8, 7, 3, 4, 3, 8, 8],
[8, 1, 3, 1, 7, 0, 9, 9, 3, 8],
[4, 0, 2, 3, 8, 2, 0, 1, 2, 4]],
[[1, 6, 2, 4, 4, 0, 2, 3, 0, 3],
[9, 6, 8, 6, 6, 5, 6, 9, 4, 1],
[0, 4, 0, 2, 9, 1, 1, 2, 4, 6],
[6, 1, 9, 9, 7, 8, 9, 7, 6, 8],
[9, 3, 9, 0, 7, 0, 0, 0, 7, 0]]
])
print(a.shape) # --> (3, 5, 10)
col2 = a[:, :, (2,)]
print(col2.shape) # --> (3, 5, 1)
max_col2 = col2.max(axis=1)
print(max_col2.shape) # --> (3, 1)
print(max_col2) # -->
[[6]
[9]
[9]]
您也可以使用np.max的keepdims参数,如下所示:a是原始数组:
a[:,:,2].max(1, keepdims=True)
输出:
[[6]
[9]
[9]]
您也可以使用np.max的keepdims参数,如下所示:a是原始数组:
a[:,:,2].max(1, keepdims=True)
输出:
[[6]
[9]
[9]]
切片所需列,沿适当的剩余轴取最大值切片所需列,沿适当的剩余轴取最大值