numpy.argmin(a, axis=None, out=None)
numpy.argmax(a, axis=None, out=None)
以argmin为例。
a : 输入数组
axis:none、0、1、2…
默认值:数组展平。否则按照指定的axis方向。如axis=0。
out : 输出结果
返回值:
下标组成的数组,返回axis轴上最小值的索引构成的矩阵。
其shape与输入数组a去掉axis维度的shape相同。
示例代码
a = np.arange(2,8).reshape(3,2)
print(a)
print("argmin:",a.argmin())
print("argmax:",a.argmax())
输出:
[[2 3]
[4 5]
[6 7]]
argmin: 0
argmax: 5
解释:
展平,即:将a这个数组所有的值都顺序展开,铺平为一个一位数组。
如该例展平为:a = [2,3,4,5,6,7]
argmin与argmax分别为找出该展平后数组的最大最小值的坐标。
且如有多个最小值,只选取第一个
示例代码
a = np.random.randint((2,14), size=(2,3,2))
print(a)
b = a.argmin(axis=0)
c = a.argmax(axis=0)
print("argmin(0):\n",b)
print("argmax(0):\n",c)
输出:
[[[ 1 6]
[ 1 9]
[ 0 3]]
[[ 1 10]
[ 1 4]
[ 0 2]]]
argmin(0):
[[0 0]
[0 1]
[0 1]]
argmax(0):
[[0 1]
[0 0]
[0 0]]
解释
axis=0时,在数组的第一维度内进行大小比较。
即对矩阵
[[[ 1 6][ 1 9][ 0 3]]
[[ 1 10][ 1 4][ 0 2]]]
的高进行比较。
上下进行比较,上为0,下为1。输出最小值的坐标。
如第二列的第一个最小值为[1,9]的1,第二个最小值为[1,4]的4。所以第二列的值为[0,1]
该例结果为[0,0][0,1][0,1]
元素的索引
print('argmin(0)索引:\n',np.take_along_axis(a, np.expand_dims(b, axis=0), axis=0))
print('argmax(0)索引:\n',np.take_along_axis(a, np.expand_dims(c, axis=0), axis=0))
输出:
argmin(0)索引:
[[[1 6]
[1 4]
[0 2]]]
argmax(0)索引:
[[[ 1 10]
[ 1 9]
[ 0 3]]]
利用该方法可得出axsi=0时的最大最小的元素索引
示例代码
a = np.random.randint((2,14), size=(2,3,2))
print(a)
b = a.argmin(axis=1)
c = a.argmax(axis=1)
print("argmin(1):\n",b)
print("argmax(1):\n",c)
输出:
[[[ 0 13]
[ 0 0]
[ 0 4]]
[[ 0 9]
[ 1 12]
[ 1 12]]]
argmin(1):
[[0 1]
[0 0]]
argmax(1):
[[0 0]
[1 1]]
解释
axis=1时,在数组的第二维度内进行大小比较。
即对矩阵
[[[ 0 13][ 0 0][ 0 4]]
[[ 0 9][ 1 12][ 1 12]]]
的宽进行比较。
左右三个进行比较,输出最小值的坐标。如第2行,第一个最小值为[0,9]的0,第二个最小值为[0,9]的9。所以第2行的结果为[0,0]
元素的索引:同上
示例代码
a = np.random.randint((2,14), size=(2,3,2))
print(a)
b = a.argmin(axis=2)
c = a.argmax(axis=2)
print("argmin(1):\n",b)
print("argmax(1):\n",c)
输出:
[[[ 1 7]
[ 1 11]
[ 1 0]]
[[ 0 8]
[ 0 13]
[ 1 1]]]
argmin(1):
[[0 0 1]
[0 0 0]]
argmax(1):
[[1 1 0]
[1 1 0]]
解释
axis=2时,在数组的第三维度内进行大小比较。
即对矩阵
[[[ 1 7][ 1 11][ 1 0]]
[[ 0 8][ 0 13][ 1 1]]]
的每对值内进行比较。
输出最小值的坐标。左为0,右为1。
如第2行,[0,8]比较的最小值为0,[1,1]比较的最小值为1。则该第二行的结果为[0,0,0]
元素的索引:同上
如有错误,烦请指正。