2.7。支持的 NumPy 功能

原文: http://numba.pydata.org/numba-doc/latest/reference/numpysupported.html

注意

支持绝大多数 NumPy 1.16 行为,但涉及NaTdatetimetimedelta使用与早期版本中存在的行为相匹配。 ufunc 套件尚未扩展以适应 NumPy 1.16 中存在的两个新的时间计算相关的附加功能。此外,在某些输入模式中出现NaN时,ediff1dinterp函数在复制输出方面存在一些小问题。

Numba 的一个目标是与 NumPy 无缝集成。 NumPy 数组为同类数据集提供了一种有效的存储方法。 NumPy dtypes 在编译时提供有用的类型信息,并且内存中潜在大量数据的常规结构化存储为代码生成提供了理想的内存布局。 Numba 擅长生成在 NumPy 数组之上执行的代码。

NumbP 在 Numba 的支持有多种形式:

  • Numba 了解对 NumPy ufuncs 的调用,并能够为其中许多人生成等效的本机代码。
  • Numba 直接支持 NumPy 阵列。访问 Numpy 数组非常有效,因为索引会降低到可能时直接访问内存。
  • Numba 能够产生 ufuncsgufuncs 。这意味着可以在 Python 中实现 ufuncs 和 gufunc,使用 NumPy C API 获得与 C 扩展模块中实现的 ufuncs / gufuncs 相当的速度。

除非另有说明,否则以下部分将重点介绍 nopython 模式中支持的 Numpy 功能。

2.7.1。标量类型

Numba 支持以下 Numpy 标量类型:

  • 整数:所有符号的整数,以及最多 64 位的任何宽度
  • 布尔
  • 实数:单精度(32 位)和双精度(64 位)实数
  • 复数:单精度(2x32 位)和双精度(2x64 位)复数
  • 日期时间和时间戳:任何单位的
  • 字符序列(但没有可用的操作)
  • 结构化标量:结构标量由上述任何类型和上述类型的数组组成

不支持以下标量类型和功能:

  • 任意 Python 对象
  • 半精度和扩展精度实数和复数
  • 嵌套结构化标量结构化标量字段可能不包含其他结构化标量

标量 Numpy 数字支持的操作与intfloat等效内置类型相同。您可以使用类型的构造函数从不同的类型或宽度进行转换。

结构化标量支持属性获取和设置,以及使用常量字符串的成员查找。

也可以看看

Numpy scalars 参考。

2.7.2。数组类型

支持上述任何标量类型的 Numpy 数组,无论其形状或布局如何。

2.7.2.1。数组访问

数组支持正常迭代。支持完整的基本索引和切片。还支持高级索引的子集:只允许一个高级索引,它必须是一维数组(它也可以与任意数量的基本索引组合)。

也可以看看

Numpy 索引参考。

2.7.2.2。属性

支持 Numpy 数组的以下属性:

2.7.2.2.1。 flags对象

flags 属性返回的对象支持contiguousc_contiguousf_contiguous属性。

2.7.2.2.2。 flat对象

flat 属性返回的对象支持迭代和索引,但要小心:非 C 连续数组的索引非常慢。

2.7.2.2.3。 realimag属性

无论 dtype 如何,Numpy 都支持这些属性,但 Numba 选择限制其支持以避免潜在的用户错误。对于数字 dtypes,Numba 遵循 Numpy 的行为。 real 属性返回复数数组实部的视图,它表现为其他数字 dtypes 的标识函数。 imag 属性返回复数数组的虚部的视图,并返回具有相同形状的零数组和其他数字 dtypes 的 dtype。对于非数字 dtypes,包括所有结构化/记录 dtypes,使用这些属性将导致编译时( <cite>TypingError</cite> )错误。此行为与 Numpy 不同,但选择此行为是为了避免与重叠这些属性的字段名称混淆。

2.7.2.3。计算

Numpy 数组的以下方法以其基本形式支持(没有任何可选参数):

相应的顶级 Numpy 函数(例如 numpy.prod() )也同样受支持。

2.7.2.4。其他方法

支持以下 Numpy 数组方法:

  • argsort() (值'quicksort''mergesort'支持kind关键字参数)
  • astype() (仅 1 参数形式)
  • copy() (不带参数)
  • dot() (仅 1 参数形式)
  • flatten() (无订单参数;仅’C’订单)
  • item() (不带参数)
  • itemset() (仅 1 参数形式)
  • ravel() (无订单参数;仅’C’订单)
  • reshape() (仅 1 参数形式)
  • sort() (不带参数)
  • sum() (有或没有axis参数)
    • 如果axis参数是编译时常量,则支持所有有效值。超出范围的值将在编译时产生LoweringError
    • 如果axis参数不是编译时常量,则仅支持 0 到 3 之间的值。超出范围的值将导致运行时异常。
  • transpose()
  • view() (仅 1 参数形式)

警告

排序可能比 Numpy 的实现略慢。

2.7.3。功能

2.7.3.1。线性代数

浮点数和复数的 1-D 和 2-D 连续数组支持基本线性代数:

注意

这些功能的实现需要安装 Scipy 0.16+。

2.7.3.2。减少

支持以下缩减功能:

2.7.3.3。其他功能

支持以下顶级功能:

支持以下构造函数,包括数字输入(用于构造标量)或序列(用于构造数组):

  • numpy.bool_
  • numpy.complex64
  • numpy.complex128
  • numpy.float32
  • numpy.float64
  • numpy.int8
  • numpy.int16
  • numpy.int32
  • numpy.int64
  • numpy.intc
  • numpy.intp
  • numpy.uint8
  • numpy.uint16
  • numpy.uint32
  • numpy.uint64
  • numpy.uintc
  • numpy.uintp

支持以下机器参数类,所有纯数字属性:

2.7.3.4。文字阵列

Python 和 Numba 都没有实际的数组文字,但你可以通过在嵌套元组上调用 numpy.array() 来构造任意数组:

  1. a = numpy.array(((a, b, c), (d, e, f)))

(Numba 尚不支持嵌套列表)

2.7.4。模块

2.7.4.1。 random

Numba 支持 numpy.random 模块中的顶级函数,但不允许您创建单独的 RandomState 实例。使用与标准随机模块相同的算法(因此适用相同的注释),但具有独立的内部状态:来自一个发电机的播种或抽取数字不会影响另一个。

支持以下功能。

2.7.4.1.1。初始化

2.7.4.1.2。简单随机数据

2.7.4.1.3。排列

2.7.4.1.4。分布

警告

以下函数不支持 <cite>size</cite> 参数。

注意

从非 Numba 代码(或从对象模式代码)调用 numpy.random.seed() 将为 Numpy 随机生成器播种,而不是 Numba 随机生成器。

注意

从版本 0.28.0 开始,发生器是线程安全的和叉安全的。每个线程和每个进程将产生独立的随机数流。

2.7.4.2。 stride_tricks

支持numpy.lib.stride_tricks模块的以下功能:

  • as_strided() 步长 参数是必需的,不支持 subok 参数)

2.7.5。标准 ufuncs

Numba 的一个目标是让 Numba 理解 NumPy 中的所有标准 ufuncs。当编译函数时找到支持的 ufunc 时,Numba 将 ufunc 映射到等效的本机代码。这允许在 Numba 代码中使用那些在 nopython 模式中编译的 ufunc。

2.7.5.1。限制

现在,只有一些标准的 ufunc 工作在 nopython 模式。以下是 Numba 知道的不同标准 ufunc 的列表,其排序方式与 NumPy 文档中的排序方式相同。

2.7.5.2。数学运算

UFUNC 模式
名称 对象模式 nopython 模式
—- —- —-
减去
划分
logaddexp
logaddexp2
true_divide
floor_divide
功率
剩余
MOD
FMOD
ABS
绝对
晶圆厂
RINT
标志
连词
EXP
EXP2
日志
LOG2
LOG10
的 expm1
log1p
开方
广场
倒数
共轭

2.7.5.3。三角函数

UFUNC 模式
名称 对象模式 nopython 模式
—- —- —-
COS
黄褐色
反正弦
ARCCOS
反正切
arctan2
hypot 将
双曲正弦
护身用手杖
正切
arcsinh
arccosh
arctanh
deg2rad
rad2deg
弧度

2.7.5.4。比特功能

UFUNC 模式
名称 对象模式 nopython 模式
—- —- —-
bitwise_and
bitwise_or
bitwise_xor
bitwise_not
倒置
左移
right_shift

2.7.5.5。比较功能

UFUNC 模式
名称 对象模式 nopython 模式
—- —- —-
更大
greater_equal
less_equal
NOT_EQUAL
等于
logical_and
逻辑或
logical_xor
logical_not
最大值
最低限度
FMAX
FMIN

2.7.5.6。浮动功能

UFUNC 模式
名称 对象模式 nopython 模式
—- —- —-
ISFINITE
isinf
isnan
signbit
复制符号
函数 nextafter
MODF 没有
ldexp 是的(*)
frexp 没有
地板
小区
TRUNC
间距

(*)Windows 32 位不支持