2.7。支持的 NumPy 功能
原文: http://numba.pydata.org/numba-doc/latest/reference/numpysupported.html
注意
支持绝大多数 NumPy 1.16 行为,但涉及NaT的datetime和timedelta使用与早期版本中存在的行为相匹配。 ufunc 套件尚未扩展以适应 NumPy 1.16 中存在的两个新的时间计算相关的附加功能。此外,在某些输入模式中出现NaN时,ediff1d和interp函数在复制输出方面存在一些小问题。
Numba 的一个目标是与 NumPy 无缝集成。 NumPy 数组为同类数据集提供了一种有效的存储方法。 NumPy dtypes 在编译时提供有用的类型信息,并且内存中潜在大量数据的常规结构化存储为代码生成提供了理想的内存布局。 Numba 擅长生成在 NumPy 数组之上执行的代码。
NumbP 在 Numba 的支持有多种形式:
- Numba 了解对 NumPy ufuncs 的调用,并能够为其中许多人生成等效的本机代码。
- Numba 直接支持 NumPy 阵列。访问 Numpy 数组非常有效,因为索引会降低到可能时直接访问内存。
- Numba 能够产生 ufuncs 和 gufuncs 。这意味着可以在 Python 中实现 ufuncs 和 gufunc,使用 NumPy C API 获得与 C 扩展模块中实现的 ufuncs / gufuncs 相当的速度。
除非另有说明,否则以下部分将重点介绍 nopython 模式中支持的 Numpy 功能。
2.7.1。标量类型
Numba 支持以下 Numpy 标量类型:
- 整数:所有符号的整数,以及最多 64 位的任何宽度
- 布尔
- 实数:单精度(32 位)和双精度(64 位)实数
- 复数:单精度(2x32 位)和双精度(2x64 位)复数
- 日期时间和时间戳:任何单位的
- 字符序列(但没有可用的操作)
- 结构化标量:结构标量由上述任何类型和上述类型的数组组成
不支持以下标量类型和功能:
- 任意 Python 对象
- 半精度和扩展精度实数和复数
- 嵌套结构化标量结构化标量字段可能不包含其他结构化标量
标量 Numpy 数字支持的操作与int或float等效内置类型相同。您可以使用类型的构造函数从不同的类型或宽度进行转换。
结构化标量支持属性获取和设置,以及使用常量字符串的成员查找。
也可以看看
Numpy scalars 参考。
2.7.2。数组类型
支持上述任何标量类型的 Numpy 数组,无论其形状或布局如何。
2.7.2.1。数组访问
数组支持正常迭代。支持完整的基本索引和切片。还支持高级索引的子集:只允许一个高级索引,它必须是一维数组(它也可以与任意数量的基本索引组合)。
也可以看看
Numpy 索引参考。
2.7.2.2。属性
支持 Numpy 数组的以下属性:
2.7.2.2.1。 flags对象
flags 属性返回的对象支持contiguous,c_contiguous和f_contiguous属性。
2.7.2.2.2。 flat对象
flat 属性返回的对象支持迭代和索引,但要小心:非 C 连续数组的索引非常慢。
2.7.2.2.3。 real和imag属性
无论 dtype 如何,Numpy 都支持这些属性,但 Numba 选择限制其支持以避免潜在的用户错误。对于数字 dtypes,Numba 遵循 Numpy 的行为。 real 属性返回复数数组实部的视图,它表现为其他数字 dtypes 的标识函数。 imag 属性返回复数数组的虚部的视图,并返回具有相同形状的零数组和其他数字 dtypes 的 dtype。对于非数字 dtypes,包括所有结构化/记录 dtypes,使用这些属性将导致编译时( TypingError )错误。此行为与 Numpy 不同,但选择此行为是为了避免与重叠这些属性的字段名称混淆。
2.7.2.3。计算
Numpy 数组的以下方法以其基本形式支持(没有任何可选参数):
all()any()argmax()argmin()conj()conjugate()cumprod()cumsum()max()mean()min()nonzero()prod()std()take()var()
相应的顶级 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 连续数组支持基本线性代数:
numpy.dot()numpy.kron()numpy.outer()numpy.trace()(只有第一个参数)。numpy.vdot()- 在 Python 3.5 及更高版本中,来自 PEP 465的矩阵乘法运算符(即
a @ b,其中a和b是 1-D 或 2-D 阵列)。 numpy.linalg.cholesky()numpy.linalg.cond()(p中只有非字符串值)。numpy.linalg.det()numpy.linalg.eig()(仅支持运行不会导致域更改的数据,例如实数输入 - >实数输出,复数输入 - >复数输出)。numpy.linalg.eigh()(只有第一个参数)。numpy.linalg.eigvals()(仅支持运行不会导致域更改的数据,例如实数输入 - >实数输出,复数输入 - >复数输出)。numpy.linalg.eigvalsh()(只有第一个参数)。numpy.linalg.inv()numpy.linalg.lstsq()numpy.linalg.matrix_power()numpy.linalg.matrix_rank()numpy.linalg.norm()(只有 2 个第一个参数,ord中只有非字符串值)。numpy.linalg.pinv()numpy.linalg.qr()(只有第一个参数)。numpy.linalg.slogdet()numpy.linalg.solve()numpy.linalg.svd()(只有 2 个第一个参数)。
注意
这些功能的实现需要安装 Scipy 0.16+。
2.7.3.2。减少
支持以下缩减功能:
numpy.diff()(只有 2 个第一个参数)numpy.median()(只有第一个参数)numpy.nancumprod()(只有第一个参数,需要 NumPy> = 1.12))numpy.nancumsum()(只有第一个参数,需要 NumPy> = 1.12))numpy.nanmax()(只有第一个参数)numpy.nanmean()(只有第一个参数)numpy.nanmedian()(只有第一个参数)numpy.nanmin()(只有第一个参数)numpy.nanpercentile()(只有 2 个第一个参数,需要 NumPy> = 1.11)numpy.nanprod()(只有第一个参数)numpy.nanstd()(只有第一个参数)numpy.nansum()(只有第一个参数)numpy.nanvar()(只有第一个参数)numpy.percentile()(只有 2 个第一个参数,需要 NumPy> = 1.10)
2.7.3.3。其他功能
支持以下顶级功能:
numpy.arange()numpy.argsort()(值'quicksort'和'mergesort'支持kind关键字参数)numpy.array()(只有 2 个第一个参数)numpy.asarray()(只有 2 个第一个参数)numpy.asfortranarray()(只有第一个参数)numpy.atleast_1d()numpy.atleast_2d()numpy.atleast_3d()numpy.bincount()(只有 2 个第一个参数)numpy.column_stack()numpy.concatenate()numpy.convolve()(只有 2 个第一个参数)numpy.copy()(只有第一个参数)numpy.corrcoef()(只有 3 个第一个参数,需要 NumPy> = 1.10 和 SciPy> = 0.16;每个 NumPy 1.11+的极值处理)numpy.correlate()(只有 2 个第一个参数)numpy.cov()(只有 5 个第一个参数,需要 NumPy> = 1.10,SciPy> = 0.16)numpy.diag()numpy.digitize()numpy.dstack()numpy.dtype()(只有第一个参数)numpy.ediff1d()numpy.empty()(只有 2 个第一个参数)numpy.empty_like()(只有 2 个第一个参数)numpy.expand_dims()numpy.extract()numpy.eye()numpy.fill_diagonal()numpy.flatten()(无订单参数;仅'C'订单)numpy.frombuffer()(只有 2 个第一个参数)numpy.full()(只有 3 个第一个参数)numpy.full_like()(只有 3 个第一个参数)numpy.histogram()(只有 3 个第一个参数)numpy.hstack()numpy.identity()numpy.interp()(只有 3 个第一个参数;需要 NumPy> = 1.10;每个 NumPy 1.12+的复杂 dtype 处理;xp必须单调递增)numpy.linspace()(只有 3 参数形式)numpy.ndenumeratenumpy.ndindexnumpy.nditer(只有第一个参数)numpy.ones()(只有 2 个第一个参数)numpy.ones_like()(只有 2 个第一个参数)numpy.partition()(只有 2 个第一个参数)numpy.ptp()(只有第一个参数)numpy.ravel()(无订单参数;仅'C'订单)numpy.reshape()(无订单参数;仅'C'订单)numpy.roll()(只有 2 个第一个参数;第二个参数shift必须是整数)numpy.roots()numpy.round_()numpy.searchsorted()(只有 3 个第一个参数)numpy.sinc()numpy.sort()(无可选参数)numpy.stack()numpy.take()(只有 2 个第一个参数)numpy.transpose()numpy.trapz()(只有 3 个第一个参数)numpy.tri()(只有 3 个第一个参数;第三个参数k必须是整数)numpy.tril()(第二个参数k必须是整数)numpy.triu()(第二个参数k必须是整数)numpy.unique()(只有第一个参数)numpy.vander()numpy.vstack()numpy.where()numpy.zeros()(只有 2 个第一个参数)numpy.zeros_like()(只有 2 个第一个参数)
支持以下构造函数,包括数字输入(用于构造标量)或序列(用于构造数组):
numpy.bool_numpy.complex64numpy.complex128numpy.float32numpy.float64numpy.int8numpy.int16numpy.int32numpy.int64numpy.intcnumpy.intpnumpy.uint8numpy.uint16numpy.uint32numpy.uint64numpy.uintcnumpy.uintp
支持以下机器参数类,所有纯数字属性:
numpy.iinfonumpy.finfo(不支持machar属性)numpy.MachAr(没有构造函数的参数)
2.7.3.4。文字阵列
Python 和 Numba 都没有实际的数组文字,但你可以通过在嵌套元组上调用 numpy.array() 来构造任意数组:
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。初始化
numpy.random.seed():仅带整数参数
2.7.4.1.2。简单随机数据
numpy.random.rand()numpy.random.randint()(只有前两个参数)numpy.random.randn()numpy.random.random()numpy.random.random_sample()numpy.random.ranf()numpy.random.sample()
2.7.4.1.3。排列
numpy.random.choice():不支持可选的 p 参数(概率数组)numpy.random.permutation()numpy.random.shuffle():序列参数必须是一维 Numpy 数组或缓冲区提供对象(例如bytearray或array.array)
2.7.4.1.4。分布
警告
以下函数不支持 size 参数。
numpy.random.beta()numpy.random.binomial()numpy.random.chisquare()numpy.random.exponential()numpy.random.f()numpy.random.gamma()numpy.random.geometric()numpy.random.gumbel()numpy.random.hypergeometric()numpy.random.laplace()numpy.random.logistic()numpy.random.lognormal()numpy.random.logseries()numpy.random.multinomial()numpy.random.negative_binomial()numpy.random.normal()numpy.random.pareto()numpy.random.poisson()numpy.random.power()numpy.random.rayleigh()numpy.random.standard_cauchy()numpy.random.standard_exponential()numpy.random.standard_gamma()numpy.random.standard_normal()numpy.random.standard_t()numpy.random.triangular()numpy.random.uniform()numpy.random.vonmises()numpy.random.wald()numpy.random.weibull()numpy.random.zipf()
注意
从非 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 | 模式 |
|---|---|
| 名称 | 对象模式 |
| --- | --- |
| 加 | 是 |
| 减去 | 是 |
| 乘 | 是 |
| 划分 | 是 |
| logaddexp | 是 |
| logaddexp2 | 是 |
| true_divide | 是 |
| floor_divide | 是 |
| 负 | 是 |
| 功率 | 是 |
| 剩余 | 是 |
| MOD | 是 |
| FMOD | 是 |
| ABS | 是 |
| 绝对 | 是 |
| 晶圆厂 | 是 |
| RINT | 是 |
| 标志 | 是 |
| 连词 | 是 |
| EXP | 是 |
| EXP2 | 是 |
| 日志 | 是 |
| LOG2 | 是 |
| LOG10 | 是 |
| 的 expm1 | 是 |
| log1p | 是 |
| 开方 | 是 |
| 广场 | 是 |
| 倒数 | 是 |
| 共轭 | 是 |
2.7.5.3。三角函数
| UFUNC | 模式 |
|---|---|
| 名称 | 对象模式 |
| --- | --- |
| 罪 | 是 |
| COS | 是 |
| 黄褐色 | 是 |
| 反正弦 | 是 |
| ARCCOS | 是 |
| 反正切 | 是 |
| arctan2 | 是 |
| hypot 将 | 是 |
| 双曲正弦 | 是 |
| 护身用手杖 | 是 |
| 正切 | 是 |
| arcsinh | 是 |
| arccosh | 是 |
| arctanh | 是 |
| deg2rad | 是 |
| rad2deg | 是 |
| 度 | 是 |
| 弧度 | 是 |
2.7.5.4。比特功能
| UFUNC | 模式 |
|---|---|
| 名称 | 对象模式 |
| --- | --- |
| bitwise_and | 是 |
| bitwise_or | 是 |
| bitwise_xor | 是 |
| bitwise_not | 是 |
| 倒置 | 是 |
| 左移 | 是 |
| right_shift | 是 |
2.7.5.5。比较功能
| UFUNC | 模式 |
|---|---|
| 名称 | 对象模式 |
| --- | --- |
| 更大 | 是 |
| greater_equal | 是 |
| 减 | 是 |
| less_equal | 是 |
| NOT_EQUAL | 是 |
| 等于 | 是 |
| logical_and | 是 |
| 逻辑或 | 是 |
| logical_xor | 是 |
| logical_not | 是 |
| 最大值 | 是 |
| 最低限度 | 是 |
| FMAX | 是 |
| FMIN | 是 |
2.7.5.6。浮动功能
| UFUNC | 模式 |
|---|---|
| 名称 | 对象模式 |
| --- | --- |
| ISFINITE | 是 |
| isinf | 是 |
| isnan | 是 |
| signbit | 是 |
| 复制符号 | 是 |
| 函数 nextafter | 是 |
| MODF | 是 |
| ldexp | 是的(*) |
| frexp | 是 |
| 地板 | 是 |
| 小区 | 是 |
| TRUNC | 是 |
| 间距 | 是 |
(*)Windows 32 位不支持
