慕村225694
无论轴号如何,np.min和的处理都是相同的。argmin0 并不意味着比 1 或 2 更特殊的东西。在所有情况下,指定的轴都会从结果中删除(与 相同np.sum)。让我们做一些更随机、更有趣的事情:In [216]: arr = np.arange(24)In [218]: np.random.shuffle(arr)In [219]: arrOut[219]: array([10, 2, 12, 11, 15, 8, 17, 20, 13, 21, 14, 1, 22, 7, 3, 5, 9, 0, 19, 16, 18, 6, 23, 4])In [220]: arr = arr.reshape(2,3,4)In [221]: arrOut[221]: array([[[10, 2, 12, 11], [15, 8, 17, 20], [13, 21, 14, 1]], [[22, 7, 3, 5], [ 9, 0, 19, 16], [18, 6, 23, 4]]])使用axis=0,确定每个“行/列”元素的哪个“平面”具有最小值。In [222]: np.min(arr, axis=0)Out[222]: array([[10, 2, 3, 5], [ 9, 0, 17, 16], [13, 6, 14, 1]])In [223]: np.argmin(arr, axis=0)Out[223]: array([[0, 0, 1, 1], [1, 1, 0, 1], [0, 1, 0, 0]])argmin值是大小为 2 的维度的值索引值。10位于第一个平面, 位于3第二个平面,依此类推。对轴 2(行)做同样的事情:In [224]: np.min(arr, axis=2)Out[224]: array([[2, 8, 1], [3, 0, 4]])In [225]: np.argmin(arr, axis=2)Out[225]: array([[1, 1, 3], [2, 1, 3]])位于2第二列、1第四列等。使用它argmin来获取min值需要熟悉高级索引:In [226]: arr[[[0],[1]], [0,1,2], _225] # Out[225] argminOut[226]: array([[2, 8, 1], [3, 0, 4]])这里我使用 (2,1) 和 (3,) 数组(或可以制成数组的列表),它们将一起广播以匹配 (2,3) 索引argmin。他们一起从 (2,3,4) 形状中选取一个 (2,3) 值数组arr。一个新的功能take_along_axis应该会让应用更argmin容易。它有一个例子。此处应用:In [236]: idx = _225 In [237]: np.take_along_axis(arr, idx[...,None], axis=2)Out[237]: array([[[2], [8], [1]], [[3], [0], [4]]])这是Out[224] np.min展开为 3d (2,3,1) 形状的数组。在显示中挑选出最少的元素可能会更容易Out[221]。In [238]: idx[...,None]Out[238]: array([[[1], [1], [3]], [[2], [1], [3]]])