NumPy core libraries¶
版本1.3.0中的新功能。
从numpy 1.3.0开始,我们正在努力将纯C,“计算”代码与python相关代码分离。目标是两个方面:使代码更清洁,并启用代码重用由numpy(scipy等)外的其他扩展。
NumPy core math library¶
numpy核心数学库('npymath')是这个方向的第一步。这个库包含大多数与数学相关的C99功能,可以在没有很好支持C99的平台上使用。核心数学函数具有与C99相同的API,除了npy_ *前缀。
The available functions are defined in
Floating point classification¶
-
NPY_NAN
¶ 这个宏定义为NaN(不是数字),并且保证未设置signbit('positive'NaN)。相应的单精度宏和扩展精度宏可用后缀F和L.
-
NPY_INFINITY
¶ 此宏定义为正inf。相应的单精度宏和扩展精度宏可用后缀F和L.
-
NPY_PZERO
¶ 此宏定义为正零。相应的单精度宏和扩展精度宏可用后缀F和L.
-
NPY_NZERO
¶ 此宏定义为负零(即已设置符号位)。相应的单精度宏和扩展精度宏可用后缀F和L.
- int
npy_isnan
(x)¶ 这是一个宏,并且等价于C99 isnan:适用于单精度,双精度和扩展精度,并返回非0值,x是NaN。
- int
npy_isfinite
(x)¶ 这是一个宏,并且等效于C99 isfinite:适用于单精度,双精度和扩展精度,并返回非0值,x不是NaN也不是无穷大。
- int
npy_isinf
(x)¶ 这是一个宏,相当于C99 isinf:适用于单精度,双精度和扩展精度,返回一个非0值,x是无穷大(正和负)。
- int
npy_signbit
(x)¶ 这是一个宏,相当于C99 signbit:适用于单精度,双精度和扩展精度,并返回一个非0值,即x具有signbit集合(即数字为负)。
- double
npy_copysign
(double x, double y)¶ 这是一个等价于C99 copysign的函数:返回x与y相同的符号。适用于任何值,包括inf和nan。单和扩展精度可用后缀f和l。
版本1.4.0中的新功能。
Useful math constants¶
以下数学常数在npy_math.h中可用。还可以通过分别添加F和L后缀来获得单精度和扩展精度。
-
NPY_E
¶ 自然对数底()
-
NPY_LOG2E
¶ 欧拉常数的基底2的对数()
-
NPY_LOG10E
¶ 欧拉常数()的以10为底的对数
-
NPY_LOGE2
¶ 2的自然对数()
-
NPY_LOGE10
¶ 10的自然对数()
-
NPY_PI
¶ Pi()
-
NPY_PI_2
¶ Pi除以2()
-
NPY_PI_4
¶ Pi除以4()
-
NPY_1_PI
¶ p1()的倒数
-
NPY_2_PI
¶ 两倍于pi的倒数()
-
NPY_EULER
¶ - 欧拉常数
Low-level floating point manipulation¶
这些可用于精确的浮点比较。
- double
npy_nextafter
(double x, double y)¶ 这是相当于C99 nextafter的函数:从y的方向返回下一个可表示的浮点值。单和扩展精度可用后缀f和l。
版本1.4.0中的新功能。
- double
npy_spacing
(double x)¶ 这是一个等价于Fortran本质的函数。从x返回x和下一个可表示浮点值之间的距离,例如spacing(1)== eps。纳米的间距和+/- inf返回纳米。单和扩展精度可用后缀f和l。
版本1.4.0中的新功能。
- void
npy_set_floatstatus_divbyzero
()¶ 设置除零浮点异常
版本1.6.0中的新功能。
- void
npy_set_floatstatus_overflow
()¶ 设置溢出浮点异常
版本1.6.0中的新功能。
- void
npy_set_floatstatus_underflow
()¶ 设置下溢浮点异常
版本1.6.0中的新功能。
- void
npy_set_floatstatus_invalid
()¶ 设置无效浮点异常
版本1.6.0中的新功能。
- int
npy_get_floatstatus
()¶ 获取浮点状态。返回具有以下可能标志的位掩码:
- NPY_FPE_DIVIDEBYZERO
- NPY_FPE_OVERFLOW
- NPY_FPE_UNDERFLOW
- NPY_FPE_INVALID
版本1.9.0中的新功能。
- int
npy_clear_floatstatus
()¶ 清除浮点状态。返回先前的状态掩码。
版本1.9.0中的新功能。
Complex functions¶
版本1.4.0中的新功能。
已添加C99-样复合物功能。如果你想实现便携式C扩展,那么可以使用。由于我们仍然支持没有C99复杂类型的平台,你需要限制为C90兼容语法,例如:
/* a = 1 + 2i \*/
npy_complex a = npy_cpack(1, 2);
npy_complex b;
b = npy_log(a);
Linking against the core math library in an extension¶
版本1.4.0中的新功能。
要在您自己的扩展中使用核心数学库,您需要在setup.py中的扩展中添加npymath编译和链接选项:
>>> from numpy.distutils.misc_util import get_info
>>> info = get_info('npymath')
>>> config.add_extension('foo', sources=['foo.c'], extra_info=info)
换句话说,info的使用与使用blas_info和co时完全相同。
Half-precision functions¶
版本2.0.0中的新功能。
The header file
像其他类型一样,NumPy包括16位浮点型的typedef npy_half。与大多数其他类型不同,你不能使用它作为C中的正常类型,因为is是npy_uint16的typedef。例如,1.0看起来像0x3c00到C,如果你做不同的有符号零之间的等式比较,你会得到-0.0!= 0.0(0x8000!= 0x0000),这是不正确的。
For these reasons, NumPy provides an API to work with npy_half values accessible by including
npy_half sum(int n, npy_half *array) {
float ret = 0;
while(n--) {
ret += npy_half_to_float(*array++);
}
return npy_float_to_half(ret);
}
外部链接:
-
NPY_HALF_ZERO
¶ 此宏定义为正零。
-
NPY_HALF_PZERO
¶ 此宏定义为正零。
-
NPY_HALF_NZERO
¶ 此宏定义为负零。
-
NPY_HALF_ONE
¶ 此宏定义为1.0。
-
NPY_HALF_NEGONE
¶ 此宏定义为-1.0。
-
NPY_HALF_PINF
¶ 此宏定义为+ inf。
-
NPY_HALF_NINF
¶ 此宏定义为-inf。
-
NPY_HALF_NAN
¶ 此宏定义为NaN值,保证未设置其符号位。
- float
npy_half_to_float
(npy_half h)¶ 将半精度浮点数转换为单精度浮点数。
- double
npy_half_to_double
(npy_half h)¶ 将半精度浮点数转换为双精度浮点数。
- npy_half
npy_float_to_half
(float f)¶ 将单精度浮点数转换为半精度浮点数。该值四舍五入到最接近的可表示的一半,连接到最接近的偶数。如果值太小或太大,系统的浮点下溢或溢出位将被置1。
- npy_half
npy_double_to_half
(double d)¶ 将双精度浮点数转换为半精度浮点数。该值四舍五入到最接近的可表示的一半,连接到最接近的偶数。如果值太小或太大,系统的浮点下溢或溢出位将被置1。
- int
npy_half_eq
(npy_half h1, npy_half h2)¶ 比较两个半精度浮点数(h1 == h2)。
- int
npy_half_ne
(npy_half h1, npy_half h2)¶ 比较两个半精度浮点数(h1!= h2)。
- int
npy_half_le
(npy_half h1, npy_half h2)¶ 比较两个半精度浮点数(h1
- int
npy_half_lt
(npy_half h1, npy_half h2)¶ 比较两个半精度浮点数(h1
- int
npy_half_ge
(npy_half h1, npy_half h2)¶ 比较两个半精度浮点(h1> = h2)。
- int
npy_half_gt
(npy_half h1, npy_half h2)¶ 比较两个半精度浮点数(h1> h2)。
- int
npy_half_eq_nonan
(npy_half h1, npy_half h2)¶ 比较两个已知不是NaN(h1 == h2)的半精度浮点数。如果值为NaN,则结果未定义。
- int
npy_half_lt_nonan
(npy_half h1, npy_half h2)¶ 比较两个已知不是NaN的半精度浮点数(h1如果值为NaN,则结果未定义。
- int
npy_half_le_nonan
(npy_half h1, npy_half h2)¶ 比较两个已知不是NaN的半精度浮点数(h1如果值为NaN,则结果未定义。
- int
npy_half_iszero
(npy_half h)¶ 测试半精度浮点是否具有等于零的值。这可能比调用npy_half_eq(h,NPY_ZERO)稍快。
- int
npy_half_isnan
(npy_half h)¶ 测试半精度浮点是否为NaN。
- int
npy_half_isinf
(npy_half h)¶ 测试半精度浮点是加或减Inf。
- int
npy_half_isfinite
(npy_half h)¶ 测试半精度浮点是否是有限的(不是NaN或Inf)。
- int
npy_half_signbit
(npy_half h)¶ 返回1是h是负数,否则为0。
- npy_half
npy_half_copysign
(npy_half x, npy_half y)¶ 返回从y复制的符号位的x值。适用于任何值,包括Inf和NaN。
- npy_half
npy_half_spacing
(npy_half h)¶ 这与半精度浮点相同,如在低级浮点部分中描述的npy_spacing和npy_spacingf。
- npy_half
npy_half_nextafter
(npy_half x, npy_half y)¶ 这与半精度浮点相同,与低级浮点部分中描述的npy_nextafter和npy_nextafterf相同。
- npy_uint16
npy_floatbits_to_halfbits
(npy_uint32 f)¶ 低级函数,将作为uint32存储的32位单精度浮点数转换为16位半精度浮点数。
- npy_uint16
npy_doublebits_to_halfbits
(npy_uint64 d)¶ 低级函数,将64位双精度浮点数转换为16位半精度浮点数,存储为uint64。
- npy_uint32
npy_halfbits_to_floatbits
(npy_uint16 h)¶ 低级函数,将16位半精度浮点数转换为32位单精度浮点数,存储为uint32。
- npy_uint64
npy_halfbits_to_doublebits
(npy_uint16 h)¶ 低级函数,将16位半精度浮点数转换为64位双精度浮点数,存储为uint64。