通用函数 ( ufunc )#
通用函数(或简称 ufunc )是一个以元素方式对 ndarrays 进行操作的函数,支持 array broadcasting , type casting 和其他几个标准功能.也就是说,ufunc 是一个 “vectorized “ 包装器,用于接受固定数量的特定输入并产生固定数量的特定输出的函数.有关通用函数的详细信息,请参见 通用函数 ( ufunc ) 基础知识 .
ufunc#
|
在整个数组上逐元素操作的函数. |
可选关键字参数#
所有 ufunc 都采用可选的关键字参数.其中大多数代表高级用法,通常不会使用.
out
第一个输出可以作为位置参数或关键字参数提供.关键字"out"参数与位置参数不兼容.
"out"关键字参数应为一个元组,每个输出对应一个条目(可以为 None,表示由 ufunc 分配数组).对于具有单个输出的 ufunc,传递单个数组(而不是包含单个数组的元组)也是有效的.
如果"out"为 None(默认),则创建一个未初始化的输出数组,该数组将在 ufunc 中填充.最后,将返回此数组,除非它是零维的,在这种情况下,它将转换为标量;可以通过传入 out=... 来避免此转换.如果您认为这样更清楚,也可以拼写为 out=Ellipsis .
请注意,仅在广播 ‘where’ 为 True 的位置填充输出.如果 ‘where’ 是标量 True(默认值),则这对应于输出的所有元素,但在其他情况下,未显式填充的元素将保留其未初始化的值.
当 ufunc 的输入和输出操作数存在内存重叠时,其运算结果与不存在内存重叠的等效运算相同.受影响的运算会根据需要创建临时副本,以消除数据依赖性.由于检测这些情况的计算成本很高,因此使用了一种启发式方法,在极少数情况下可能会导致不必要的临时副本.对于数据依赖性足够简单,可以进行启发式分析的运算,即使数组重叠,如果可以推断出不需要副本,也不会创建临时副本.例如, np.add(a, b, out=a) 不会涉及副本.
where
接受一个布尔数组,该数组与操作数一起广播. True 值表示在该位置计算 ufunc,False 值表示将输出中的值保持原样.此参数不能用于广义 ufunc,因为它们接受非标量输入.
请注意,如果创建了一个未初始化的返回数组,则 False 值将使这些值保持未初始化.
axes
一个元组列表,包含广义 ufunc 应在其上运行的轴的索引. 例如,对于适用于矩阵乘法的 (i,j),(j,k)->(i,k) 签名,基本元素是二维矩阵,并且这些矩阵被认为存储在每个参数的最后两个轴中. 对应的 axes 关键字将是 [(-2, -1), (-2, -1), (-2, -1)] . 为了简单起见,对于在 1 维数组(向量)上运行的广义 ufunc,接受单个整数而不是单元素元组;对于所有输出都是标量的广义 ufunc,可以省略输出元组.
axis
广义 ufunc 应该在其上运行的单个轴. 这是在单个共享核心维度上运行的 ufunc 的快捷方式,等效于为每个单核心维度参数传递带有 (axis,) 条目的 axes ,并为所有其他参数传递 () . 例如,对于签名 (i),(i)->() ,它等效于传递 axes=[(axis,), (axis,), ()] .
keepdims
如果将其设置为 True ,则缩减的轴将保留在结果中,作为大小为 1 的维度,以便结果可以针对输入正确广播. 此选项只能用于在输入上运行的广义 ufunc,这些输入都具有相同数量的核心维度,并且输出没有核心维度,即具有诸如 (i),(i)->() 或 (m,m)->() 之类的签名. 如果使用,可以使用 axes 和 axis 控制输出中维度的位置.
casting
可以是 ‘no’,’equiv’,’safe’,’same_kind’ 或 ‘unsafe’. 有关参数值的说明,请参见 can_cast .
提供了一种策略,用于确定允许哪种类型的转换. 为了与以前版本的 NumPy 兼容,对于 numpy < 1.7,默认为"unsafe". 在 numpy 1.7 中,开始向"same_kind"过渡,其中 ufunc 对在"unsafe"规则下允许但在"same_kind"规则下不允许的调用产生 DeprecationWarning. 从 numpy 1.10 开始,默认值为"same_kind".
order
指定输出数组的计算迭代顺序/内存布局. 默认为"K". "C"表示输出应该是 C 连续的,"F"表示 F 连续的,"A"表示如果输入是 F 连续的,并且也不是 C 连续的,则表示 F 连续的,否则表示 C 连续的,"K"表示尽可能匹配输入的元素顺序.
dtype
以与签名相同的方式覆盖输出数组的 DType. 这应确保计算的匹配精度. 选择的确切计算 DType 可能取决于 ufunc,并且输入可能会被转换为此 DType 以执行计算.
subok
默认为 true. 如果设置为 false,则输出将始终是严格数组,而不是子类型.
signature
Dtype,DType 元组或指示 ufunc 的输入和输出类型的特殊签名字符串.
此参数允许用户指定用于计算的确切 DType. 将根据需要使用强制转换. 除非该数组的 signature 为 None ,否则不考虑输入数组的实际 DType.
当所有 DType 都被固定时,会选择一个特定的循环,如果不存在匹配的循环,则会引发错误.如果某些 DType 未指定并保留为 None ,则行为可能取决于 ufunc.此时,ufunc 的 types 属性会提供一个可用签名的列表.(此列表可能缺少 NumPy 未定义的 DType.)
signature 仅指定 DType 类/类型. 例如,它可以指定操作应该是 datetime64 或 float64 操作. 它不指定 datetime64 时间单位或 float64 字节顺序.
为了向后兼容,此参数也可以作为 sig 提供,尽管首选长格式. 请注意,这不应与广义 ufunc signature 混淆,后者存储在 ufunc 对象的 signature 属性中.
属性#
通用函数有一些信息属性. 这些属性都不能设置.
__doc__* |
每个 ufunc 的文档字符串. 文档字符串的第一部分是根据输出数量,名称和输入数量动态生成的. 文档字符串的第二部分是在创建时提供的,并与 ufunc 一起存储. |
__name__* |
ufunc 的名称. |
输入的数量. |
|
输出的数量. |
|
参数的数量. |
|
类型的数量. |
|
返回一个列表,其中类型分组为 input->output. |
|
标识值. |
|
广义 ufunc 操作的核心元素的定义. |
方法#
|
通过沿一个轴应用 ufunc,将 |
|
累积将运算符应用于所有元素的结果. |
|
在单个轴上使用指定切片执行(局部)reduce. |
|
将 ufunc op 应用于 A 中的 a 和 B 中的 b 的所有对 (a, b). |
|
对 'indices' 指定的元素,在操作数 'a' 上执行非缓冲的原地操作. |
警告
对数据类型范围"太小"而无法处理结果的数组执行类似 reduce 的操作将以静默方式换行. 应该使用 dtype 来增加执行 reduce 的数据类型的大小.
可用的 ufunc#
numpy 中目前定义了 60 多个通用函数,它们涵盖一个或多个类型,涵盖了各种操作. 当使用相关的中缀表示法时(例如,当写入 a + b 且 a 或 b 是 add(a, b) 时,会在内部调用 ndarray ),其中一些 ufunc 会自动在数组上调用. 然而,您可能仍然希望使用 ufunc 调用,以便使用可选的输出参数将输出放置在你选择的对象中.
回想一下,每个 ufunc 都是逐元素运算的. 因此,每个标量 ufunc 都将被描述为作用于一组标量输入以返回一组标量输出.
备注
即使你使用可选的输出参数,ufunc 仍然会返回它的输出.
数学运算#
|
按元素方式相加参数. |
|
逐个元素地减去参数. |
|
逐元素相乘参数. |
|
两个数组的矩阵积. |
|
按元素划分参数. |
|
输入值的指数和的对数. |
|
以 2 为底的输入的指数和的对数. |
|
按元素划分参数. |
|
返回不大于输入的除法的最大整数. |
|
数值负数,逐元素. |
|
数值正数,逐元素. |
|
第一个数组的元素按元素方式提升为第二个数组的幂. |
|
第一个数组的元素按元素方式提升为第二个数组的幂. |
|
返回除法的 element-wise 余数. |
|
返回除法的 element-wise 余数. |
|
返回除法的 element-wise 余数. |
|
同时返回按元素的商和余数. |
|
逐元素计算绝对值. |
|
逐元素计算绝对值. |
|
将数组的元素四舍五入到最接近的整数. |
|
返回一个逐元素的数字符号的指示. |
|
计算 Heaviside 阶跃函数. |
|
返回复共轭,按元素计算. |
|
返回复共轭,按元素计算. |
|
计算输入数组中所有元素的指数. |
|
计算输入数组中所有 p 的 2p . |
|
按元素方式取自然对数. |
|
x 的以 2 为底的对数. |
|
返回输入数组以 10 为底的对数,按元素方式. |
|
计算数组中所有元素的 |
|
逐元素地返回输入数组加 1 后的自然对数. |
|
返回数组的非负平方根,按元素计算. |
|
返回输入的逐元素平方. |
|
返回数组的立方根,按元素方式计算. |
|
返回参数的倒数,按元素方式计算. |
|
返回 |
|
返回 |
小技巧
可选的输出参数可以用来帮助你为大型计算节省内存.如果你的数组很大,复杂的表达式可能会花费比绝对必要的时间更长,因为临时计算空间的创建和(稍后的)销毁.例如,表达式 G = A * B + C 等价于 T1 = A * B; G = T1 + C; del T1 .它会更快地执行为 G = A * B; add(G, C, G) ,这与 G = A * B; G += C 相同.
三角函数#
当需要角度时,所有三角函数都使用弧度.度数与弧度的比率是 \(180^{\circ}/\pi.\)
|
三角正弦,逐元素. |
|
逐元素计算余弦. |
|
逐元素计算正切. |
|
按元素求反正弦. |
|
三角反余弦,按元素计算. |
|
逐元素计算三角反正切. |
|
逐元素计算 |
|
给定直角三角形的"直角边",返回其斜边. |
|
双曲正弦,逐元素. |
|
双曲余弦,逐元素. |
|
逐元素计算双曲正切. |
|
逐元素计算反双曲正弦. |
|
反双曲余弦,按元素计算. |
|
逐元素反双曲正切. |
|
将角度从弧度转换为度. |
|
将角度从度转换为弧度. |
|
将角度从度转换为弧度. |
|
将角度从弧度转换为度. |
位操作函数#
这些函数都需要整数参数,它们会操作这些参数的位模式.
|
按元素计算两个数组的按位与. |
|
按元素计算两个数组的按位或. |
|
按元素计算两个数组的按位异或. |
|
按元素计算按位反转或按位非. |
|
将整数的位向左移动. |
|
将整数的位向右移动. |
比较函数#
|
逐元素返回 (x1 > x2) 的真值. |
|
逐元素返回 (x1 >= x2) 的真值. |
|
按元素方式返回 (x1 < x2) 的真值. |
|
按元素方式返回 (x1 <= x2) 的真值. |
|
逐个元素返回 (x1 != x2). |
|
按元素返回 (x1 == x2). |
警告
不要使用 Python 关键字 and 和 or 来组合逻辑数组表达式. 这些关键字将测试整个数组的真值(而不是你期望的逐元素). 请改用按位运算符 & 和 |.
|
逐个元素计算 x1 AND x2 的真值. |
|
逐个元素计算 x1 OR x2 的真值. |
|
按元素计算 x1 XOR x2 的真值. |
|
逐个元素计算 NOT x 的真值. |
警告
按位运算符 & 和 | 是执行逐元素数组比较的正确方法. 确保你理解运算符优先级: (a > 2) & (a < 5) 是正确的语法,因为 a > 2 & a < 5 会导致错误,因为首先计算 2 & a .
|
数组元素的 Element-wise 最大值. |
小技巧
Python 函数 max() 将找到一维数组的最大值,但它会使用较慢的序列接口.maximum ufunc 的 reduce 方法要快得多.此外,对于大于一维的数组, max() 方法不会给出您可能期望的答案.minimum 的 reduce 方法还允许您计算数组的总最小值.
|
数组元素的 Element-wise 最小值. |
警告
maximum(a, b) 的行为与 max(a, b) 的行为不同.作为 ufunc, maximum(a, b) 对 a 和 b 执行逐元素比较,并根据两个数组中哪个元素更大来选择结果的每个元素.相比之下, max(a, b) 将对象 a 和 b 视为一个整体,查看 a > b 的(总)真值,并使用它来返回 a 或 b (作为一个整体). minimum(a, b) 和 min(a, b) 之间存在类似的区别.
浮点函数#
回想一下,所有这些函数都对数组逐元素地工作,返回数组输出.描述仅详细说明单个操作.
|
逐个元素地测试有限性(非无穷大且非非数字). |
|
逐个元素地测试正无穷或负无穷. |
|
逐个元素地测试 NaN 并将结果作为布尔数组返回. |
|
逐个元素地测试 NaT (非时间) 并将结果作为布尔数组返回. |
|
逐元素计算绝对值. |
|
如果设置了符号位(小于零),则返回逐元素的 True. |
|
逐元素地将 x1 的符号更改为 x2 的符号. |
|
返回 x1 之后朝向 x2 的下一个浮点值,逐元素. |
|
返回 x 与最近的相邻数字之间的距离. |
|
返回数组的 fractional 和 integral 部分,逐元素. |
|
返回 x1 * 2x2,按元素方式计算. |
|
将 x 的元素分解为尾数和二的指数. |
|
返回除法的 element-wise 余数. |
|
返回输入的 floor,逐个元素计算. |
|
返回输入的上限,按元素方式计算. |
|
返回输入的截断值,按元素方式. |