通用函数 (ufunc

通用功能(或 ufunc 简而言之)是在 ndarrays 以一个元素一个元素的方式,支持 array broadcastingtype casting 以及其他一些标准功能。也就是说,ufunc是一个“:term:vectorized”包装器,用于接受固定数量的特定输入并生成固定数量的特定输出的函数。

在numpy中,通用函数是 numpy.ufunc 班级。许多内置函数是用编译后的C代码实现的。基本的ufunc在scalar上运行,但也有一种通用的类型,其基本元素是子数组(向量、矩阵等),广播是在其他维度上进行的。你也可以定制 ufunc 实例使用 frompyfunc 工厂功能。

广播

每个通用函数接受数组输入,并通过对输入执行核心函数元素(其中元素通常是标量,但可以是向量或更高阶的通用UFUNC子数组)来生成数组输出。采用标准的广播规则,使得不完全相同形状的输入仍然可以有效地操作。广播可以通过四条规则来理解:

  1. 所有输入数组 ndim 小于最大的输入数组 ndim ,在形状上预加1。

  2. 输出形状的每个维度中的大小是该维度中所有输入大小的最大值。

  3. 如果输入在特定维度中的大小与该维度中的输出大小匹配,或者其值正好为1,则可以在计算中使用该输入。

  4. 如果输入的形状中的维度大小为1,则该维度中的第一个数据条目将用于该维度中的所有计算。换句话说,步进机构 ufunc 不会沿着这个维度 stride 对于该维度将为0)。

在numpy中使用广播来决定如何处理不同形状的数组;例如,所有算术运算 (+-* ……) ndarrays 操作前广播阵列。

如果上述规则产生了一个有效的结果,则一组数组称为“可广播”到相同的形状。 i.e. ,以下情况之一为真:

  1. 数组的形状完全相同。

  2. 数组的维数都相同,每个维数的长度要么是公共长度,要么是1。

  3. 维度太少的数组可以用长度为1的维度预先填充其形状,以满足属性2的要求。

例子

如果 a.shape IS(5,1), b.shape IS(1,6), c.shape IS(6,)和 d.shape 是这样吗? d 是一个标量,那么 abcd 都可以广播到维度(5,6);以及

  • a 就像一个(5,6)数组,其中 a[:,0] 广播到其他栏目,

  • b 就像一个(5,6)数组,其中 b[0,:] 广播到其他行,

  • c 类似于(1,6)数组,因此类似于(5,6)数组,其中 c[:] 广播到每一行,最后,

  • d 类似于(5,6)数组,其中重复单个值。

输出类型确定

ufunc(及其方法)的输出不一定是 ndarray ,如果所有输入参数都不是 ndarrays . 实际上,如果任何输入定义了 __array_ufunc__ 方法,控件将完全传递给该函数,即 overridden .

如果没有任何输入覆盖ufunc,则所有输出数组都将传递给 __array_prepare____array_wrap__ 输入方法(此外 ndarrays 和scalars)定义它的 and 具有最高 __array_priority__ 通用函数的任何其他输入。默认值 __array_priority__ ndarray的值为0.0,默认值为 __array_priority__ 子类型的值为0.0。矩阵有 __array_priority__ 等于10。

所有ufunc也可以接受输出参数。如有必要,输出将转换为提供的输出数组的数据类型。如果一个班级 __array__ 方法用于输出,结果将写入返回的对象 __array__ . 那么,如果这个班也有一个 __array_prepare__ 方法,因此元数据可以根据ufunc的上下文(由ufunc本身、传递给ufunc的参数和ufunc域组成的上下文)确定。数组对象由 __array_prepare__ 传递给ufunc进行计算。最后,如果该类还具有 __array_wrap__ 方法,返回的 ndarray 结果将在将控制权传递回调用方之前传递给该方法。

使用内部缓冲器

在内部,缓冲区用于未对齐的数据、交换的数据以及必须从一种数据类型转换为另一种数据类型的数据。内部缓冲区的大小可以根据每个线程进行设置。最多可以有 2 (n_{{\mathrm{{inputs}}}} + n_{{\mathrm{{outputs}}}}) 为处理来自ufunc所有输入和输出的数据而创建的指定大小的缓冲区。缓冲区的默认大小是10000个元素。如果需要基于缓冲区的计算,但所有输入数组都小于缓冲区大小,则将在计算进行之前复制那些行为错误或类型不正确的数组。因此,调整缓冲区的大小可能会改变完成各种类型的ufunc计算的速度。使用函数可以访问设置此变量的简单接口

setbufsize (尺寸)

设置ufuncs中使用的缓冲区的大小。

错误处理

通用功能可以触发硬件中的特殊浮点状态寄存器(例如被零除)。如果在您的平台上可用,这些寄存器将在计算期间定期检查。错误处理基于每个线程进行控制,并且可以使用函数进行配置

seterr \ [all, divide, over, under, invalid] )

设置如何处理浮点错误。

seterrcall (FUNC)

设置浮点错误回调函数或日志对象。

铸造规则

注解

在numpy 1.6.0中,创建了一个类型提升API来封装用于确定输出类型的机制。查看功能 result_typepromote_typesmin_scalar_type 了解更多详细信息。

每个ufunc的核心是一个一维跨步循环,它实现特定类型组合的实际函数。当创建一个ufunc时,会给它一个内部循环的静态列表和一个ufunc操作的类型签名的对应列表。ufunc机器使用此列表来确定用于特定情况的内部循环。你可以检查 .types 属性来查看哪些类型组合具有定义的内部循环以及它们生成的输出类型 (character codes 在所述输出中使用是为了简洁)。

当ufunc没有所提供输入类型的核心循环实现时,必须对一个或多个输入执行强制转换。如果找不到输入类型的实现,则算法将搜索具有类型签名的实现,所有输入都可以“安全”转换到该类型签名。在所有必要的类型转换之后,将选择并执行其内部循环列表中找到的第一个。回想一下,UFUNC期间的内部副本(甚至用于铸造)仅限于内部缓冲区的大小(可由用户设置)。

注解

numpy中的通用函数足够灵活,可以具有混合类型签名。因此,例如,可以定义一个通用函数来处理浮点值和整数值。见 ldexp 举个例子。

根据上面的描述,强制转换规则基本上是通过一个数据类型何时可以“安全地”强制转换为另一个数据类型的问题来实现的。这个问题的答案可以通过函数调用在python中确定: can_cast(fromtype, totype) . 下图显示了作者64位系统上24种内部支持类型的调用结果。您可以使用图中给出的代码为您的系统生成此表。

图形

显示64位系统的“can cast safely”表的代码段。通常,输出取决于系统;您的系统可能会导致不同的表。

>>> mark = {False: ' -', True: ' Y'}
>>> def print_table(ntypes):
...     print('X ' + ' '.join(ntypes))
...     for row in ntypes:
...         print(row, end='')
...         for col in ntypes:
...             print(mark[np.can_cast(row, col)], end='')
...         print()
...
>>> print_table(np.typecodes['All'])
X ? b h i l q p B H I L Q P e f d g F D G S U V O M m
? Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y - Y
b - Y Y Y Y Y Y - - - - - - Y Y Y Y Y Y Y Y Y Y Y - Y
h - - Y Y Y Y Y - - - - - - - Y Y Y Y Y Y Y Y Y Y - Y
i - - - Y Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
l - - - - Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
q - - - - Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
p - - - - Y Y Y - - - - - - - - Y Y - Y Y Y Y Y Y - Y
B - - Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y - Y
H - - - Y Y Y Y - Y Y Y Y Y - Y Y Y Y Y Y Y Y Y Y - Y
I - - - - Y Y Y - - Y Y Y Y - - Y Y - Y Y Y Y Y Y - Y
L - - - - - - - - - - Y Y Y - - Y Y - Y Y Y Y Y Y - -
Q - - - - - - - - - - Y Y Y - - Y Y - Y Y Y Y Y Y - -
P - - - - - - - - - - Y Y Y - - Y Y - Y Y Y Y Y Y - -
e - - - - - - - - - - - - - Y Y Y Y Y Y Y Y Y Y Y - -
f - - - - - - - - - - - - - - Y Y Y Y Y Y Y Y Y Y - -
d - - - - - - - - - - - - - - - Y Y - Y Y Y Y Y Y - -
g - - - - - - - - - - - - - - - - Y - - Y Y Y Y Y - -
F - - - - - - - - - - - - - - - - - Y Y Y Y Y Y Y - -
D - - - - - - - - - - - - - - - - - - Y Y Y Y Y Y - -
G - - - - - - - - - - - - - - - - - - - Y Y Y Y Y - -
S - - - - - - - - - - - - - - - - - - - - Y Y Y Y - -
U - - - - - - - - - - - - - - - - - - - - - Y Y Y - -
V - - - - - - - - - - - - - - - - - - - - - - Y Y - -
O - - - - - - - - - - - - - - - - - - - - - - Y Y - -
M - - - - - - - - - - - - - - - - - - - - - - Y Y Y -
m - - - - - - - - - - - - - - - - - - - - - - Y Y - Y

您应该注意到,虽然为了完整性而包含在表中,但UFUNC不能操作“S”、“U”和“V”类型。另外,请注意,在32位系统上,整数类型可能具有不同的大小,从而导致表发生轻微的更改。

混合标量数组操作使用一组不同的强制转换规则,以确保标量不能“向上强制转换”数组,除非标量是一种根本不同的数据类型。( i.e. ,在数据类型层次结构中的不同层次结构下)。此规则允许您在代码中使用标量常量(作为python类型,在ufuncs中进行相应的解释),而不必担心标量常量的精度是否会导致在大(小精度)数组上进行上延。

覆盖ufunc行为

类(包括ndarray子类)可以通过定义特定的方法来覆盖ufunc对它们的作用。有关详细信息,请参阅 标准数组子类 .

ufunc

numpy.ufunc ()

对整个数组逐个元素进行操作的函数。

可选关键字参数

所有ufunc都采用可选的关键字参数。其中大多数表示高级用法,通常不会使用。

out

1.6 新版功能.

第一个输出可以作为位置参数或关键字参数提供。关键字“out”参数与位置参数不兼容。

1.10 新版功能.

“out”关键字参数应该是一个元组,每个输出有一个条目(对于由ufunc分配的数组可以是None)。对于具有单个输出的ufuncs,传递单个数组(而不是包含单个数组的元组)也是有效的。

不推荐将“out”关键字参数中的单个数组传递给具有多个输出的ufunc,它将在numpy 1.10中引发警告,并在将来的版本中引发错误。

如果“out”为“none”(默认值),则会创建未初始化的返回数组。然后,在广播“Where”为真的地方,用UFUNC的结果填充输出数组。如果“where”是标量true(默认值),那么它对应于正在填充的整个输出。请注意,未显式填充的输出将保留其未初始化的值。

1.13 新版功能.

ufunc输入和输出操作数具有内存重叠的操作定义为与没有内存重叠的等效操作相同。受影响的操作会根据需要制作临时拷贝以消除数据依赖性。由于检测这些情况的计算成本很高,因此使用启发式方法,这可能在极少数情况下导致不必要的临时副本。对于数据依赖性足够简单的操作,即使数组重叠,也不会产生临时拷贝,如果可以推断,拷贝是不必要的。举个例子, np.add(a, b, out=a) 不涉及副本。

在哪里?

1.7 新版功能.

接受与操作数一起广播的布尔数组。值“真”表示在该位置计算ufunc,值“假”表示只保留输出中的值。此参数不能用于采用非标量输入的通用UFunc。

请注意,如果创建了未初始化的返回数组,则值false将保留这些值。 未初始化的 .

axes

1.15 新版功能.

一个包含通用ufunc应该操作的轴索引的元组列表。例如,对于签名 (i,j),(j,k)->(i,k) 适用于矩阵乘法,基元素是二维矩阵,它们被视为存储在每个参数的最后两个轴中。相应的axs关键字将是 [(-2, -1), (-2, -1), (-2, -1)] . 为了简单起见,对于在一维数组(向量)上操作的广义UFunc,接受单个整数而不是单个元素元组,对于所有输出都是标量的广义UFunc,可以省略输出元组。

axis

1.15 新版功能.

一个通用UFUNC应该在其上运行的单轴。这是UFUNC在单一共享核心维度上运行的捷径,相当于传入 axes 条目 (axis,) 对于每个核心维度参数和 () 为所有其他人。例如,对于签名 (i),(i)->() ,相当于传入 axes=[(axis,), (axis,), ()] .

守门人

1.15 新版功能.

如果设置为 True ,缩小的轴将作为尺寸为1的维度留在结果中,这样结果将针对输入正确广播。此选项只能用于通用ufunc,这些通用ufunc操作的输入都具有相同数量的核心维度,并且输出没有核心维度,即具有类似的签名 (i),(i)->()(m,m)->() . 如果使用,可以使用 axesaxis .

铸造

1.6 新版功能.

可能是'no'、'equiv'、'safe'、'same'u kind'或'unsafe'。见 can_cast 用于解释参数值。

为允许哪种类型的强制转换提供策略。为了与以前版本的numpy兼容,对于numpy<1.7,这默认为“不安全”。在numpy 1.7中,开始向“同类”过渡,UFUNC对“不安全”规则允许但不符合“同类”规则的呼叫发出拒绝警告。从numpy 1.10开始,默认值为“同类”。

秩序

1.6 新版功能.

指定输出数组的计算迭代顺序/内存布局。默认为“k”。“c”表示输出应为c-连续,“f”表示f-连续,“a”表示f-连续,如果输入为f-连续,也不是c-连续,否则为c-连续,“k”表示尽可能接近输入的元素顺序。

D型

1.6 新版功能.

重写计算数组和输出数组的数据类型。类似 签名 .

苏博克

1.6 新版功能.

默认为true。如果设置为false,则输出将始终是严格数组,而不是子类型。

签名

或者是数据类型、数据类型的元组,或者是指示UFUNC的输入和输出类型的特殊签名字符串。此参数允许您提供用于基础计算的一维循环的特定签名。如果为ufunc指定的循环不存在,则会引发类型错误。通常,通过将输入类型与可用的类型进行比较,并搜索具有所有输入都可以安全转换的数据类型的循环,可以自动找到合适的循环。这个关键字参数允许您绕过搜索并选择一个特定的循环。可用签名列表由 类型 ufunc对象的属性。为了向后兼容,此参数也可以提供为 sig 尽管首选长型。请注意,这不应与通用UFUNC混淆。 signature 存储在 签名 UFUNC对象的属性。

ExtoBJ

长度为3的列表,指定ufunc缓冲区大小、错误模式整数和错误回调函数。通常,这些值在特定于线程的字典中查找。在这里传递它们可以避免查找和使用为错误模式提供的低级规范。例如,对于需要对循环中的小数组执行许多ufunc调用的计算,这可能很有用。

属性

通用函数具有一些信息属性。无法设置任何属性。

__doc__

每个ufunc的docstring。docstring的第一部分是由输出数量、名称和输入数量动态生成的。docstring的第二部分在创建时提供,并与ufunc一起存储。

__name__

ufunc的名称。

ufunc.nin 

输入的数目。

ufunc.nout 

输出的数目。

ufunc.nargs 

参数的数目。

ufunc.ntypes 

类型数。

ufunc.types 

返回一个列表,其中包含类型分组的输入->输出。

ufunc.identity 

标识值。

ufunc.signature 

通用UFUNC操作的核心元素的定义。

方法

所有不明飞行物都有四种方法。但是,这些方法只对接受两个输入参数并返回一个输出参数的标量UFunc有意义。试图对其他UFunc调用这些方法将导致 ValueError . 类似于reduce的方法都采用 axis 关键字,A D型 关键字和 out 关键字,数组的所有维度都必须大于等于1。这个 axis 关键字指定要在其上进行缩减的数组的轴(负值向后计数)。一般来说,它是一个整数,尽管 ufunc.reduce ,它也可以是 int 一次缩小多个轴,或不缩小所有轴。这个 D型 关键字允许您管理在天真地使用时出现的非常常见的问题 ufunc.reduce . 有时,您可能有一个特定数据类型的数组,希望将其所有元素相加,但结果不适合该数组的数据类型。如果您有一个单字节整数数组,则通常会发生这种情况。这个 D型 关键字允许您更改进行缩减的数据类型(因此也可以更改输出的类型)。因此,您可以确保输出是精度足以处理输出的数据类型。更改reduce类型的责任主要由您决定。有一个例外:如果没有 D型 如果输入类型是整数(或布尔)数据类型,并且小于 int_ 数据类型,它将在内部向上转换为 int_ (或) uint )数据类型。最后, out 关键字允许您提供输出数组(对于当前唯一支持的单输出UFunc;但是,对于将来的扩展,可以传入具有单个参数的元组)。如果 out 给出了 D型 参数被忽略。

UFUNC还有第五种方法,允许使用花式索引执行就地操作。在使用花式索引的维度上不使用缓冲,因此花式索引可以多次列出一个项,并且将对该项的上一个操作的结果执行该操作。

ufunc.reduce [数组] [, axis, dtype, out, ...] )

减少 array 通过沿一个轴应用ufunc,一个一个的尺寸。

ufunc.accumulate [数组] [, axis, dtype, out] )

累积将运算符应用于所有元素的结果。

ufunc.reduceat \(数组,索引[, axis, ...] )

在单个轴上使用指定切片执行(本地)缩减。

ufunc.outer /,A,(B), *  * 克瓦格斯)

应用UFUNC op 所有带A的对(A,B) A 和B在 B .

ufunc.at \(a,指数[, b] )

为“indexs”指定的元素对操作数“a”执行未缓冲的就地操作。

警告

对数据类型范围“太小”无法处理结果的数组执行类似reduce的操作将自动换行。一个人应该用 dtype 以增加进行缩减的数据类型的大小。

可用UFUNC

目前,在 numpy 在一个或多个类型上,覆盖了各种各样的操作。当使用相关的中缀符号时,其中一些ufunc会在数组上自动调用。( e.g.add(a, b)a + b 是书面的 ab 是一个 ndarray )不过,您可能仍然希望使用ufunc调用,以便使用可选的输出参数将输出放置在您选择的对象中。

回想一下,每个ufunc都逐元素操作。因此,每个标量ufunc将被描述为作用于一组标量输入以返回一组标量输出。

注解

即使使用可选的输出参数,ufunc仍然返回其输出。

数学运算

add \(x1,x2,)/[, out, where, casting, order, ...] )

添加参数元素。

subtract \(x1,x2,)/[, out, where, casting, ...] )

减去参数,按元素排序。

multiply \(x1,x2,)/[, out, where, casting, ...] )

逐元素乘法参数。

matmul \(x1,x2,)/[, out, casting, order, ...] )

两个数组的矩阵积。

divide \(x1,x2,)/[, out, where, casting, ...] )

返回输入的真除法,按元素排序。

logaddexp \(x1,x2,)/[, out, where, casting, ...] )

输入的指数总和的对数。

logaddexp2 \(x1,x2,)/[, out, where, casting, ...] )

以2为底的输入的指数之和的对数。

true_divide \(x1,x2,)/[, out, where, ...] )

返回输入的真除法,按元素排序。

floor_divide \(x1,x2,)/[, out, where, ...] )

返回小于或等于输入除法的最大整数。

negative (x,) [, out, where, casting, order, ...] )

数值负,元素方向。

positive (x,) [, out, where, casting, order, ...] )

数值正,元素方向。

power \(x1,x2,)/[, out, where, casting, ...] )

第一个数组元素从第二个数组提升为幂,按元素排序。

float_power \(x1,x2,)/[, out, where, ...] )

第一个数组元素从第二个数组提升为幂,按元素排序。

remainder \(x1,x2,)/[, out, where, casting, ...] )

返回按元素排序的除法余数。

mod \(x1,x2,)/[, out, where, casting, order, ...] )

返回按元素排序的除法余数。

fmod \(x1,x2,)/[, out, where, casting, ...] )

返回按元素排序的除法余数。

divmod (x1,x2) [, out1, out2] \ [[, out, ...] )

同时返回元素商和余数。

absolute (x,) [, out, where, casting, order, ...] )

计算绝对值元素。

fabs (x,) [, out, where, casting, order, ...] )

计算绝对值元素。

rint (x,) [, out, where, casting, order, ...] )

将数组元素舍入到最接近的整数。

sign (x,) [, out, where, casting, order, ...] )

返回按元素指示的数字符号。

heaviside \(x1,x2,)/[, out, where, casting, ...] )

计算重侧阶跃函数。

conj (x,) [, out, where, casting, order, ...] )

返回复共轭,按元素排序。

conjugate (x,) [, out, where, casting, ...] )

返回复共轭,按元素排序。

exp (x,) [, out, where, casting, order, ...] )

计算输入数组中所有元素的指数。

exp2 (x,) [, out, where, casting, order, ...] )

计算 2**p 为了所有 p 在输入数组中。

log (x,) [, out, where, casting, order, ...] )

自然对数,按元素排序。

log2 (x,) [, out, where, casting, order, ...] )

以2为底的对数 x .

log10 (x,) [, out, where, casting, order, ...] )

返回以10为底的输入数组的对数,按元素排序。

expm1 (x,) [, out, where, casting, order, ...] )

计算 exp(x) - 1 用于数组中的所有元素。

log1p (x,) [, out, where, casting, order, ...] )

返回一的自然对数加上输入数组,按元素排序。

sqrt (x,) [, out, where, casting, order, ...] )

按元素返回数组的非负平方根。

square (x,) [, out, where, casting, order, ...] )

返回输入元素的平方。

cbrt (x,) [, out, where, casting, order, ...] )

按元素返回数组的多维数据集根。

reciprocal (x,) [, out, where, casting, ...] )

返回参数的倒数,按元素排序。

gcd \(x1,x2,)/[, out, where, casting, order, ...] )

返回的最大公约数 |x1||x2|

lcm \(x1,x2,)/[, out, where, casting, order, ...] )

返回的最小公倍数 |x1||x2|

小技巧

可选的输出参数可用于帮助您为大型计算节省内存。如果数组很大,则由于临时计算空间的创建和(稍后)破坏,复杂表达式可能需要比绝对必要的更长的时间。例如,表达式 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.

sin (x,) [, out, where, casting, order, ...] )

三角正弦,元素方向。

cos (x,) [, out, where, casting, order, ...] )

余弦元素。

tan (x,) [, out, where, casting, order, ...] )

计算切线元素。

arcsin (x,) [, out, where, casting, order, ...] )

逆正弦,元素方向。

arccos (x,) [, out, where, casting, order, ...] )

三角反余弦,元素方向。

arctan (x,) [, out, where, casting, order, ...] )

三角反切线,元素方向。

arctan2 \(x1,x2,)/[, out, where, casting, ...] )

元素方向的弧正切 x1/x2 正确选择象限。

hypot \(x1,x2,)/[, out, where, casting, ...] )

给定直角三角形的“腿”,返回其斜边。

sinh (x,) [, out, where, casting, order, ...] )

双曲正弦,元素方向。

cosh (x,) [, out, where, casting, order, ...] )

双曲余弦,元素方向。

tanh (x,) [, out, where, casting, order, ...] )

计算双曲正切元。

arcsinh (x,) [, out, where, casting, order, ...] )

逆双曲正弦元。

arccosh (x,) [, out, where, casting, order, ...] )

反双曲余弦,元素方向。

arctanh (x,) [, out, where, casting, order, ...] )

反双曲正切元。

degrees (x,) [, out, where, casting, order, ...] )

将角度从弧度转换为度数。

radians (x,) [, out, where, casting, order, ...] )

将角度从度转换为弧度。

deg2rad (x,) [, out, where, casting, order, ...] )

将角度从度转换为弧度。

rad2deg (x,) [, out, where, casting, order, ...] )

将角度从弧度转换为度数。

位旋转函数

这些函数都需要整型参数,它们可以操作这些参数的位模式。

bitwise_and \(x1,x2,)/[, out, where, ...] )

计算两个数组的位和元素。

bitwise_or \(x1,x2,)/[, out, where, casting, ...] )

按位或按元素计算两个数组的位。

bitwise_xor \(x1,x2,)/[, out, where, ...] )

计算两个数组元素的逐位异或。

invert (x,) [, out, where, casting, order, ...] )

计算位逆,或位逆,元素逆。

left_shift \(x1,x2,)/[, out, where, casting, ...] )

将整数的位向左移动。

right_shift \(x1,x2,)/[, out, where, ...] )

将整数的位右移。

比较函数

greater \(x1,x2,)/[, out, where, casting, ...] )

返回(x1>x2)元素的真值。

greater_equal \(x1,x2,)/[, out, where, ...] )

返回(x1>=x2)元素的真值。

less \(x1,x2,)/[, out, where, casting, ...] )

返回(x1<x2)元素的真值。

less_equal \(x1,x2,)/[, out, where, casting, ...] )

返回(x1<=x2)元素的真值。

not_equal \(x1,x2,)/[, out, where, casting, ...] )

返回(X1!=x2)元件方面。

equal \(x1,x2,)/[, out, where, casting, ...] )

返回(x1==x2)元素。

警告

不要使用python关键字 andor 组合逻辑数组表达式。这些关键字将测试整个数组的真值(而不是您所期望的逐元素)。使用位运算符&和代替。

logical_and \(x1,x2,)/[, out, where, ...] )

计算x1和x2元素的真值。

logical_or \(x1,x2,)/[, out, where, casting, ...] )

计算x1或x2元素的真值。

logical_xor \(x1,x2,)/[, out, where, ...] )

按元素计算x1 xor x2的真值。

logical_not (x,) [, out, where, casting, ...] )

计算非x元素的真值。

警告

位运算符&和是执行逐元素数组比较的正确方法。确保您了解运算符优先级: (a > 2) & (a < 5) 正确的语法是因为 a > 2 & a < 5 会导致错误,因为 2 & a 首先计算。

maximum \(x1,x2,)/[, out, where, casting, ...] )

数组元素的元素顺序最大值。

小技巧

python函数 max() 将在一维数组上找到最大值,但它将使用较慢的序列接口。最大UFUNC的减少方法要快得多。此外, max() 方法不会给出您可能期望的大于一个维度的数组的答案。最小值的reduce方法还允许您计算数组的总最小值。

minimum \(x1,x2,)/[, out, where, casting, ...] )

数组元素的元素最小值。

警告

行为 maximum(a, b) 不同于 max(a, b) . 作为UFUNC, maximum(a, b) 执行元素之间的比较 ab 并根据两个数组中哪个元素较大,选择结果中的每个元素。相反, max(a, b) 处理对象 ab 从整体上看 a > b 用它返回 ab (作为一个整体)两者之间也存在类似的差异 minimum(a, b)min(a, b) .

fmax \(x1,x2,)/[, out, where, casting, ...] )

数组元素的元素顺序最大值。

fmin \(x1,x2,)/[, out, where, casting, ...] )

数组元素的元素最小值。

浮动函数

回想一下,所有这些函数都在数组上逐元素工作,返回数组输出。描述仅详细说明一个操作。

isfinite (x,) [, out, where, casting, order, ...] )

测试元素的有限性(不是无限或不是数字)。

isinf (x,) [, out, where, casting, order, ...] )

正无穷大或负无穷大的测试元素。

isnan (x,) [, out, where, casting, order, ...] )

对NaN进行逐元素测试,并将结果作为布尔数组返回。

isnat (x,) [, out, where, casting, order, ...] )

为nat测试元素wise(不是时间),并将结果作为布尔数组返回。

fabs (x,) [, out, where, casting, order, ...] )

计算绝对值元素。

signbit (x,) [, out, where, casting, order, ...] )

返回设置了signbit(小于零)的元素wise true。

copysign \(x1,x2,)/[, out, where, casting, ...] )

将x1的符号改为x2的符号,按元素排序。

nextafter \(x1,x2,)/[, out, where, casting, ...] )

返回x1之后的下一个浮点值,朝x2,元素方向。

spacing (x,) [, out, where, casting, order, ...] )

返回x和最近相邻数字之间的距离。

modf (x) [, out1, out2] \ [[, out, where, ...] )

按元素返回数组的小数部分和整数部分。

ldexp \(x1,x2,)/[, out, where, casting, ...] )

返回X1 * 2* *x2,元素方面。

frexp (x) [, out1, out2] \ [[, out, where, ...] )

将x元素分解为尾数和两个指数。

fmod \(x1,x2,)/[, out, where, casting, ...] )

返回按元素排序的除法余数。

floor (x,) [, out, where, casting, order, ...] )

按元素返回输入的楼层。

ceil (x,) [, out, where, casting, order, ...] )

按元素返回输入的上限。

trunc (x,) [, out, where, casting, order, ...] )

按元素返回输入的截断值。