沿指定轴的 3D NumPy 数组中的最小值

Posted

技术标签:

【中文标题】沿指定轴的 3D NumPy 数组中的最小值【英文标题】:Minimum value in 3D NumPy array along specified axis 【发布时间】:2019-06-25 04:09:00 【问题描述】:

假设你有一个 3D 数组,如下所示:

a = np.random.uniform(0,10,(3,4,4))

a
Out[167]: 
array([[[6.11382489, 5.33572952, 2.6994938 , 5.32924568],
        [0.02494179, 9.5813176 , 3.78090323, 7.73698908],
        [0.4559432 , 3.14531716, 4.18929635, 9.44256735],
        [7.05641989, 0.51355523, 6.61806454, 1.3124488 ]],

       [[9.79806021, 6.9343234 , 3.96018673, 8.97424501],
        [3.25146771, 5.06744849, 6.05870707, 2.27286515],
        [4.66656429, 6.92791142, 7.1623226 , 5.34108811],
        [6.09831564, 9.52367529, 8.27257007, 8.01510805]],

       [[5.62545596, 9.01048599, 6.76713644, 7.71836144],
        [5.59842752, 0.34003062, 8.07114444, 8.5382837 ],
        [0.20420194, 6.39088367, 4.97895935, 4.26247875],
        [1.2701483 , 8.35244104, 2.69965027, 8.39305974]]])

有没有一种方法可以有效地将沿axis=0 的切片中的最小值作为一个数组?

所以在这种情况下,我将指定 axis=0(即维度长度 = 3 的轴)并返回最小值:(0.02494179, 2.27286515, 0.20420194)

我觉得这是一个简单的问题,但我似乎无法让它工作,所以任何关于此事的帮助将不胜感激!

【问题讨论】:

np.min(a, axis=0) 不起作用吗?我不是 100% 确定你为什么只期望 3 个值。 啊,我刚刚意识到使用 np.min(a, axis=(1,2)) 返回我在道歉之后的值我应该更清楚地说明我在每个中的最小值之后沿指定轴切片 【参考方案1】:

如果我猜对了,你只需要应用“min”两次

例如:

>>> np.random.seed(1)  #reproduce the same results 
>>> a = np.random.randint(0,10,(3,2,4)) #using int is easier to understand                                                                       
Out[4]: 
array([[[5, 8, 9, 5],
        [0, 0, 1, 7]],

       [[6, 9, 2, 4],
        [5, 2, 4, 2]],

       [[4, 7, 7, 9],
        [1, 7, 0, 6]]])

 >>> a.min(axis=0).min(axis=0)                                                                          
Out[5]: array([0, 0, 0, 2])

这是我第一次发布答案,希望我做得很好。

【讨论】:

我不确定这是否完全正确,因为如果我有您在答案中提供的数组,我会寻找 ([0,2,0]) 的输出。您的解决方案所做的是计算数组每一列中的最小值。不过谢谢!

以上是关于沿指定轴的 3D NumPy 数组中的最小值的主要内容,如果未能解决你的问题,请参考以下文章

NumPy统计函数

获取 3D numpy 数组中沿轴的连续非 nans 值总和的最大值

numpy中min和max的用法

numpy 统计函数与随机数

在 numpy 数组中取每个条目的最小值 +- 10 行

我需要一个 numpy 数组中的 N 个最小(索引)值