原文:https://docs.scipy.org/doc/numpy/reference/c-api.coremath.html
校对:(虚位以待)
版本1.3.0中的新功能。
从numpy 1.3.0开始,我们正在努力将纯C,“计算”代码与python相关代码分离。目标是两个方面:使代码更清洁,并启用代码重用由numpy(scipy等)外的其他扩展。
numpy核心数学库('npymath')是这个方向的第一步。这个库包含大多数与数学相关的C99功能,可以在没有很好支持C99的平台上使用。核心数学函数具有与C99相同的API,除了npy_ *前缀。
The available functions are defined in
NPY_NAN
这个宏定义为NaN(不是数字),并且保证未设置signbit('positive'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 signbit:适用于单精度,双精度和扩展精度,并返回一个非0值,即x具有signbit集合(即数字为负)。
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
Pi()
NPY_PI_2
Pi除以2()
NPY_PI_4
Pi除以4()
NPY_1_PI
p1()的倒数
NPY_2_PI
两倍于pi的倒数()
NPY_EULER
这些可用于精确的浮点比较。
npy_nextafter
(double x, double y)这是相当于C99 nextafter的函数:从y的方向返回下一个可表示的浮点值。单和扩展精度可用后缀f和l。
版本1.4.0中的新功能。
npy_spacing
(double x)这是一个等价于Fortran本质的函数。从x返回x和下一个可表示浮点值之间的距离,例如spacing(1)== eps。纳米的间距和+/- inf返回纳米。单和扩展精度可用后缀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
()获取浮点状态。返回具有以下可能标志的位掩码:
版本1.9.0中的新功能。
npy_clear_floatstatus
()清除浮点状态。返回先前的状态掩码。
版本1.9.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时完全相同。
版本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值,保证未设置其符号位。
npy_half_to_float
(npy_half h)将半精度浮点数转换为单精度浮点数。
npy_half_to_double
(npy_half h)将半精度浮点数转换为双精度浮点数。
npy_float_to_half
(float f)将单精度浮点数转换为半精度浮点数。该值四舍五入到最接近的可表示的一半,连接到最接近的偶数。如果值太小或太大,系统的浮点下溢或溢出位将被置1。
npy_double_to_half
(double d)将双精度浮点数转换为半精度浮点数。该值四舍五入到最接近的可表示的一半,连接到最接近的偶数。如果值太小或太大,系统的浮点下溢或溢出位将被置1。
npy_half_eq
(npy_half h1, npy_half h2)比较两个半精度浮点数(h1 == h2)。
npy_half_ne
(npy_half h1, npy_half h2)比较两个半精度浮点数(h1!= h2)。
npy_half_le
(npy_half h1, npy_half h2)比较两个半精度浮点数(h1
npy_half_lt
(npy_half h1, npy_half h2)比较两个半精度浮点数(h1
npy_half_ge
(npy_half h1, npy_half h2)比较两个半精度浮点(h1> = h2)。
npy_half_gt
(npy_half h1, npy_half h2)比较两个半精度浮点数(h1> h2)。
npy_half_eq_nonan
(npy_half h1, npy_half h2)比较两个已知不是NaN(h1 == h2)的半精度浮点数。如果值为NaN,则结果未定义。
npy_half_lt_nonan
(npy_half h1, npy_half h2)比较两个已知不是NaN的半精度浮点数(h1如果值为NaN,则结果未定义。
npy_half_le_nonan
(npy_half h1, npy_half h2)比较两个已知不是NaN的半精度浮点数(h1如果值为NaN,则结果未定义。
npy_half_iszero
(npy_half h)测试半精度浮点是否具有等于零的值。这可能比调用npy_half_eq(h,NPY_ZERO)稍快。
npy_half_isnan
(npy_half h)测试半精度浮点是否为NaN。
npy_half_isinf
(npy_half h)测试半精度浮点是加或减Inf。
npy_half_isfinite
(npy_half h)测试半精度浮点是否是有限的(不是NaN或Inf)。
npy_half_signbit
(npy_half h)返回1是h是负数,否则为0。
npy_half_copysign
(npy_half x, npy_half y)返回从y复制的符号位的x值。适用于任何值,包括Inf和NaN。
npy_half_spacing
(npy_half h)这与半精度浮点相同,如在低级浮点部分中描述的npy_spacing和npy_spacingf。
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)低级函数,将64位双精度浮点数转换为16位半精度浮点数,存储为uint64。
npy_halfbits_to_floatbits
(npy_uint16 h)低级函数,将16位半精度浮点数转换为32位单精度浮点数,存储为uint32。
npy_halfbits_to_doublebits
(npy_uint16 h)低级函数,将16位半精度浮点数转换为64位双精度浮点数,存储为uint64。