当前位置: 首页 > 工具软件 > arg > 使用案例 >

numpy.argmin()和numpy.argmax()函数详解,易懂

姬宝
2023-12-01

numpy.argmin(a, axis=None, out=None)
numpy.argmax(a, axis=None, out=None)

以argmin为例。

1. 各参数值

a : 输入数组
axis:none、0、1、2…
默认值:数组展平。否则按照指定的axis方向。如axis=0。
out : 输出结果

返回值:
下标组成的数组,返回axis轴上最小值的索引构成的矩阵。
其shape与输入数组a去掉axis维度的shape相同。

2. 当axis未设置值,即默认方式为“展平”

示例代码

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分别为找出该展平后数组的最大最小值的坐标。
且如有多个最小值,只选取第一个

以下以三维数组为例,则此时axis的值分别为相应的维度 一张图片的矩阵值我们可以称为高像素 我们可以将axis的值分别理解为:0——高,1——宽,2——像素

3. ## 当axis=0,shape=(3,2)

示例代码

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时的最大最小的元素索引

4. 当axis=1,shape=(2,2)

示例代码

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]

元素的索引:同上

5. 当axis=2,shape=(2,3)

示例代码

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]

元素的索引:同上

如有错误,烦请指正。

 类似资料: