如何解决如何在numpy的3d数组中找到最小值和最大值,并对结果进行分组?
我有一个像这样的 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 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]]]
有了它,我喜欢像这样创建一个 2d ndarray:
[[6]
[9]
[9]]
其中这个二维数组的每个元素都是原始数组第三列的最大值:
我已经花了几个小时试图解决这个问题,但没有运气......
我要求将 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]]
,
您需要做的是获取您想要的列(在本例中为 arr[:,2]
)。这将具有 (3,5)
的形状。 arr=np.max(arr[:,2],axis=-1)
然后以 (3)
的形状生成您想要的数组内容。然后您可以调用 arr=np.reshape(arr,1))
以获得您想要的形状。
下面我尝试一步一步地进行操作,并在每次操作后打印形状。
(2,)
很重要,以便保留维度并像您想要的那样保持二维(否则它会自动折叠单例维度)。
import numpy as np
a = np.array([
[[4,1,2,7,8,9,7],[7,4,3,5],[6,6],[5,1],[2,6,1]],[[9,[9,0],[1,8],[8,[4,4]],[[1,3],[0,0]]
])
print(a.shape) # --> (3,10)
col2 = a[:,(2,)]
print(col2.shape) # --> (3,1)
max_col2 = col2.max(axis=1)
print(max_col2.shape) # --> (3,1)
print(max_col2) # -->
[[6]
[9]
[9]]
,
您也可以像这样使用 keepdims
的 np.max
参数(a
是您的原始数组):
a[:,2].max(1,keepdims=True)
输出:
[[6]
[9]
[9]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。