本文解释关于amin函数的使用方法。
官方解释
链接🔗:https://numpy.org/doc/stable/reference/generated/numpy.amin.html
函数及其六个参数
np.amin() 函数和 np.min() 函数的作用的一致的。类似的 np.amax() 与 np.max() 的作用也是一致的。
函数定义
numpy.amin(a, axis=None, out=None, keepdims=< no value>, initial=< no value>, where=< no value>)
返回值
返回输入数组中最小值的标量或数组,具体取决于指定的轴和条件。
参数
a: 输入的数组。axis: 可选。沿着哪个轴计算最小值。如果没有指定,计算整个数组的最小值。out: 可选。输出结果保存到该数组中。它必须具有与预期输出相同的形状。keepdims: 可选。如果设置为 True,保持原数组的维度;否则,结果数组的形状将减小。initial: 可选。用于指定最小值的初始值。这在数组为空的情况下特别有用。where: 可选。用于指定条件,只有条件为 True 的元素才会被考虑。
实例参数 axis 和 keepdims:
import numpy as np
arr = np.array([[3, 7, 5],
[8, 4, 2],
[6, 1, 9]])
min_value = np.amin(arr, axis=0, keepdims=True)
min_value_keepdims = np.amin(arr, axis=0) # axis=0 表示按照列
print(min_value) # [[3 1 2]]
print(min_value.shape) # (1, 3)
print(min_value_keepdims) # [3 1 2]
print(min_value_keepdims.shape) # (3,)
实例参数 initial :
如果有这个参数的话最终还需要跟这个参数进行比较,然后取最小的。
import numpy as np
arr = np.array([[3, 7, 5],
[8, 4, 2],
[6, 1, 9]])
min_value_initial = np.amin(arr, axis=1, initial=2)
print(min_value_initial) # 输出 [2, 2, 1]
实例参数 where :
import numpy as np
arr = np.array([[3, 7, 5],
[8, 4, 2],
[6, 1, 9]])
condition = (arr % 2 == 0) # 仅考虑偶数元素,
min_value_where = np.amin(arr, axis=1, where=condition, initial=10)
print(min_value_where) # 输出 [10 2 6]
那如果有元素不是偶数呢?这个例子就告诉我们答案了。—等于initial。
那如果只是用where参数,不指定initial参数是不是可以呢?答案是不可以。
会报如下错误,即便所有元素都是偶数满足condition:
ValueError: The error occurred because the np.amin() function requires an initial value to be specified when using a where mask.
错误解释:
- reduction operation ‘minimum’ does not have an identity:
最小值计算没有一个默认的单位元。例如,对于加法来说,单位元是 0,因为 a + 0 = a。对于最小值计算,没有类似的单位元。 - to use a where mask one has to specify ‘initial’:
在使用 where 掩码时,必须指定 initial 参数。
分析:
Q : 为什么一定需要 initial 参数?
A : 在指定了 where 掩码的情况下,计算可能会忽略数组中的一些元素。如果所有被考虑的元素都被掩码过滤掉,那么没有任何值可以用于计算最小值。这时,initial 参数提供了一个初始值,以确保计算能够进行。即便所有元素都是偶数满足condition,也必须在使用where的时候同时使用initial参数。
实例参数 out(没啥用我感觉):
import numpy as np
arr = np.array([[3, 7, 5],
[8, 4, 2],
[6, 1, 9]])
out_arr = np.empty((3,))
np.amin(arr, axis=1, out=out_arr)
print(out_arr) # 输出 [3. 2. 1.]
154

被折叠的 条评论
为什么被折叠?



