NumPy参考 >NumPy C-API > NumPy核心库
1.3.0版的新功能。
从numpy 1.3.0开始,我们正在将纯C“计算”代码与python依赖代码分开。目标是双重的:使代码更整洁,并使numpy之外的其他扩展(scipy等)重新使用代码。
numpy核心数学库('npymath')是朝着这个方向迈出的第一步。该库包含大多数与数学相关的C99功能,可以在不完全支持C99的平台上使用。核心数学函数具有与C99相同的API,除了npy_ *前缀。
可用的函数在<numpy / npy_math.h>中定义-如有疑问,请参考此头文件。
NPY_NAN
¶此宏定义为NaN(非数字),并确保未设置符号位(“正” NaN)。带有后缀F和L的是相应的单精度和扩展精度宏。
NPY_INFINITY
¶此宏定义为正inf。带有后缀F和L的是相应的单精度和扩展精度宏。
NPY_PZERO
¶该宏定义为正零。带有后缀F和L的是相应的单精度和扩展精度宏。
NPY_NZERO
¶该宏定义为负零(即设置了符号位)。带有后缀F和L的是相应的单精度和扩展精度宏。
npy_isnan
( x )¶这是一个宏,等效于C99 isnan:适用于单精度,双精度和扩展精度,并且返回非0值是x是NaN。
npy_isfinite
( x )¶这是一个宏,等效于C99 isfinite:适用于单精度,双精度和扩展精度,并且返回非0值,即x既不是NaN也不是无穷大。
npy_isinf
( x )¶这是一个宏,等效于C99 isinf:适用于单精度,双精度和扩展精度,并且返回非0值(如果x为无限大)(正负)。
npy_signbit
( x )¶这是一个宏,等效于C99符号位:适用于单精度,双精度和扩展精度,并且返回非0值,即x设置了符号位(即数字为负)。
npy_copysign
( double x,double y )¶这是等效于C99 copysign的函数:返回x,其符号与y相同。适用于任何值,包括inf和nan。后缀f和l提供单精度和扩展精度。
1.4.0版的新功能。
可以使用以下数学常数npy_math.h
。也可以通过分别添加f
和
l
后缀来获得单精度和扩展精度。
NPY_E
¶自然对数的底数()
NPY_LOG2E
¶欧拉常数()以2为底的对数
NPY_LOG10E
¶欧拉常数()以10为底的对数
NPY_LOGE2
¶2的自然对数()
NPY_LOGE10
¶10()的自然对数
NPY_PI
¶皮()
NPY_PI_2
¶Pi除以2()
NPY_PI_4
¶Pi除以4()
NPY_1_PI
¶pi的倒数()
NPY_2_PI
¶pi的倒数的两倍()
NPY_EULER
¶这些对于精确的浮点比较很有用。
npy_nextafter
( double x,double y )¶这是等效于next的C99的函数:从x沿y方向返回下一个可表示的浮点值。后缀f和l提供单精度和扩展精度。
1.4.0版的新功能。
npy_spacing
( double x )¶这是等效于Fortran内部函数的函数。x与x的下一个可表示浮点值之间的返回距离,例如,space(1)== eps。nan的间隔和+/- inf返回nan。后缀f和l提供单精度和扩展精度。
1.4.0版的新功能。
npy_set_floatstatus_divbyzero
()¶设置除零浮点异常
1.6.0版中的新功能。
npy_set_floatstatus_overflow
()¶设置溢出浮点异常
1.6.0版中的新功能。
npy_set_floatstatus_underflow
()¶设置下溢浮点异常
1.6.0版中的新功能。
npy_set_floatstatus_invalid
()¶设置无效的浮点异常
1.6.0版中的新功能。
npy_get_floatstatus
()¶获取浮点状态。返回带有以下可能标志的位掩码:
NPY_FPE_DIVIDEBYZERO
NPY_FPE_OVERFLOW
NPY_FPE_UNDERFLOW
NPY_FPE_INVALID
请注意,这样做npy_get_floatstatus_barrier
是可取的,因为它可以防止激进的编译器优化相对于设置状态的代码对调用进行重新排序,这可能导致错误的结果。
1.9.0版中的新功能。
npy_get_floatstatus_barrier
( char * )¶获取浮点状态。传递了指向局部变量的指针,以防止积极的编译器优化相对于设置状态的代码重新定义此函数调用,这可能导致错误的结果。
返回带有以下可能标志的位掩码:
NPY_FPE_DIVIDEBYZERO
NPY_FPE_OVERFLOW
NPY_FPE_UNDERFLOW
NPY_FPE_INVALID
1.15.0版中的新功能。
npy_clear_floatstatus
()¶清除浮点状态。返回上一个状态掩码。
请注意,这样做npy_clear_floatstatus_barrier
是可取的,因为它可以防止激进的编译器优化相对于设置状态的代码对调用进行重新排序,这可能导致错误的结果。
1.9.0版中的新功能。
npy_clear_floatstatus_barrier
( char * )¶清除浮点状态。传递了指向局部变量的指针,以防止积极的编译器优化重新定义此函数调用。返回上一个状态掩码。
1.15.0版中的新功能。
1.4.0版的新功能。
类似于C99的复杂功能已添加。如果您希望实现可移植的C扩展,可以使用那些。由于我们仍然支持没有C99复杂类型的平台,因此您需要限制为与C90兼容的语法,例如:
/* a = 1 + 2i \*/
npy_complex a = npy_cpack(1, 2);
npy_complex b;
b = npy_log(a);
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时的用法完全相同。
1.6.0版中的新功能。
头文件<numpy / halffloat.h>提供了与IEEE 754-2008 16位浮点值一起使用的功能。尽管此格式通常不用于数值计算,但对于存储需要浮点但不需要太多精度的值很有用。它也可以用作了解浮点舍入误差性质的教育工具。
与其他类型一样,NumPy为16位浮点数包含typedef npy_half。与大多数其他类型不同,您不能在C中将其用作普通类型,因为它是npy_uint16的typedef。例如,1.0看起来像0x3c00到C,并且如果在不同的有符号零之间进行相等比较,您将得到-0.0!= 0.0(0x8000!= 0x0000),这是不正确的。
由于这些原因,NumPy提供了一个API,用于通过包含<numpy / halffloat.h>并链接到'npymath'来访问npy_half值。对于不直接提供的功能(例如算术运算),首选方法是将其转换为float或double,然后再次返回,如以下示例所示。
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值,保证未设置其符号位。
npy_float_to_half
( float f )¶将单精度浮点数转换为半精度浮点数。该值将四舍五入到最接近的可表示一半,并把关系四舍五入到最接近的偶数。如果该值太小或太大,将设置系统的浮点下溢或上溢位。
npy_double_to_half
( double d )¶将双精度浮点数转换为半精度浮点数。该值将四舍五入到最接近的可表示一半,并把关系四舍五入到最接近的偶数。如果该值太小或太大,将设置系统的浮点下溢或上溢位。
npy_half_nextafter
(npy_half x,npy_half y )¶半精度浮点数与低级浮点部分中描述的npy_nextafter和npy_nextafterf相同。
npy_floatbits_to_halfbits
(npy_uint32 f )¶低级函数将存储为uint32的32位单精度浮点数转换为16位半精度浮点数。
npy_doublebits_to_halfbits
(npy_uint64 d )¶低级函数将存储为uint64的64位双精度浮点数转换为16位半精度浮点数。
npy_halfbits_to_floatbits
(npy_uint16 h )¶将16位半精度浮点数转换为32位单精度浮点数的低级函数,存储为uint32。
npy_halfbits_to_doublebits
(npy_uint16 h )¶低级函数,将16位半精度浮点数转换为64位双精度浮点数,并存储为uint64。