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.ndenumerate
numpy.ndindex
numpy.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.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
支持以下机器参数类,所有纯数字属性:
numpy.iinfo
numpy.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 位不支持