Numpy 逻辑计算和位运算

2024-01-07 22:31:34

函数列表

下面这张表列出了Numpy中几乎所有常用的逻辑函数和位处理函数,这些函数都有着明确的数学概念,其主要的输入输出均符合来自数学公式的直觉,大部分数组操作则支持通过axis来调整作用的坐标轴,所以这些函数并不需要分条解析,甚至从我的角度来说,过于琐碎的文字堆积,将这上百个函数写他个几页甚至十几页,反而会影响阅读。

真值测试all数组全为True;any数组中有True
内容测试isfinite, isinf, isneginf, isposinf, isnan, isnat
类型测试iscomplex, iscomplexobj, isreal, isrealobj,
isfortran, isscalar
逻辑计算logical_and, logical_or, logical_not, logical_xor
比较array_equal, array_equiv, equal, not_equal
greater, greater_equal, less, less_equal
signbit小于0时为True
位运算bitwise_and, bitwise_or, bitwise_xor,
bitwise_not(invert), left_shift, right_shift
临近判断allclose, isclose, spacing

其中有关数组类型的测试函数有必要说明一下

  • iscomplex(x) 判断是否为复数
  • iscomplexobj(x) 判断是否为复数据类型
  • isfortran(a) 检查数组是否按照Fortran的形式存储。
  • isreal(x) 判断是否为实数
  • isrealobj(x) 判断是否为实数对象
  • ·isscalar(num) 如果num为标量类型,则返回True。

令人困惑的是Fortran-order 和C-order的区别,这里主要涉及到数据在内存中的组织方式,可以在创建数组时通过order='c'或者order=FORTRAN来规定。

临近处理函数

现有两个等长数组ab,如果想判断二者之差是否在允许的范围之内,则可通过allclose

>>> import numpy as np
>>> x = np.arange(10)
>>> y = x + np.random.rand(10)
>>> np.allclose(x,y,1)
True
>>> np.allclose(x,y,0.2)
False
>>> np.isclose(x,y,0.2)
array([False, False,  True,  True,  True,  True,  True,  True,  True, True])

二进制编码相关

通过frexp可以将数值分解为二进制指数和尾数,相当于把值分解为 a × 2 b a\times2^b a×2b中的 a a a b b bldexp则为其反运算。

>>> np.frexp(float(16))
(0.5, 5)
>>> np.ldexp(0.5,5)
16.0

spacing可以获取数值在编程语言中的固有误差,

>>> np.spacing(1)
2.220446049250313e-16

这个很容易理解,在编程语言中,所有数值都是通过二进制表示的,所以这个1也不列外,但二进制表示的浮点数,并不能精确地描述每个数值,所以,与自然数1最接近的二进制浮点数,彼此相差大约2e-16

nextafter可以得到距离某个值最近的下一个二进制浮点数

>>> np.nextafter(2,1)
1.9999999999999998
>>> np.nextafter(2,2)
2.0
>>> np.nextafter(2,3)
2.0000000000000004

其第二个参数表示所谓下一个指代的方向。

文章来源:https://blog.csdn.net/m0_37816922/article/details/127644744
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。