基本运算

算术和比较操作ndarrays 被定义为逐元素操作,并且通常将 ndarray对象作为结果产生。

  • 算术运算+,-,*,/,//, %,divmod(),**,pow()
  • 位运算<<,>>,&,^,|,~
  • 逻辑运算 not,and,or
  • 比较运算==,<,>, <=,>=,!=
  • 自等运算+=,-=,*=,/=,//=,%=,**=,<<=,>>=,&=,^=,|=,~=

以上所有运算在ndarray中均已经复写实现。

比较运算符

方法 描述
ndarray._lt_(self, value, /) 返回 self<value.
ndarray._le_(self, value, /) 返回 self<=value.
ndarray._gt_(self, value, /) 返回 self>value.
ndarray._ge_(self, value, /) 返回 self>=value.
ndarray._eq_(self, value, /) 返回 self==value.
ndarray._ne_(self, value, /) 返回 self!=value.

array(bool)的真值:

方法 描述
ndarray.__bool__(self, /) self != 0

tip 注意:

数组的真值测试会调用
ndarray.\_\_bool__,如果数组中的元素数大于1,则会引发错误,因为此类数组的真值是不明确的。使用.any()
.all()不是清楚这种情况下的含义。(如果元素数为0,则数组的计算结果为False。)

一元操作

方法 描述
ndarray.__neg__(self, /) -self
ndarray.__pos__(self, /) +self
ndarray.__abs__(self)
ndarray.__invert__(self, /) ~self

算术运算

方法 描述
ndarray.__add__(self, value, /) 返回 self+value.
ndarray.__sub__(self, value, /) 返回 self-value.
ndarray.__mul__(self, value, /) 返回 self*value.
ndarray.__truediv__(self, value, /) 返回 self/value.
ndarray.__floordiv__(self, value, /) 返回 self//value.
ndarray.__mod__(self, value, /) 返回 self%value.
ndarray.__divmod__(self, value, /) 返回 divmod(self, value).
ndarray.__pow__(self, value[, mod]) 返回 pow(self, value, mod).
ndarray.__lshift__(self, value, /) 返回 self<<value.
ndarray.__rshift__(self, value, /) 返回 self>>value.
ndarray.__and__(self, value, /) 返回 self&value.
ndarray.__or__(self, value, /) 返回 self
ndarray.__xor__(self, value, /) 返回 self^value.

tip 注意

  • pow默认忽略任何第三个参数,
    因为底层ufunc只接受两个参数。
  • 三个划分算子都是定义的; div默认情况下truediv处于活动状态,
    __future__分割生效时处于活动状态。
  • 因为ndarray是内置类型(用C编写),
    所以 __r{op}__ 不直接定义特殊方法。
  • 可以使用调用为数组实现许多算术特殊方法的函数__array_ufunc__

自身算术运算

方法 描述
ndarray.__iadd__(self, value, /) 返回 self+=value。
ndarray.__isub__(self, value, /) 返回 self==value。
ndarray.__imul__(self, value, /) 返回 self*=value。
ndarray.__itruediv__(self, value, /) 返回 self/=value。
ndarray.__ifloordiv__(self, value, /) 返回 self//=value。
ndarray.__imod__(self, value, /) 返回 self%=value。
ndarray.__ipow__(self, value, /) 返回 self**=value。
ndarray.__ilshift__(self, value, /) 返回 self<<=value。
ndarray.__irshift__(self, value, /) 返回 self>>=value。
ndarray.__iand__(self, value, /) 返回 self&=value。
ndarray.__ior__(self, value, /) 返回 self
ndarray.__ixor__(self, value, /) 返回 self^=value。

danger 警告

就地操作将使用由两个操作数的数据类型决定的精度来执行计算,但会悄悄地向下转换结果(如果需要),
以便它可以重新适应数组。
因此,对于混合精度计算,A {op} = B 可以不同于 A = A {op} B。例如,假设 a = ones(3,3)
然后,a += 3ja = a + 3j 不同:当它们都执行相同的计算时,a += 3 将结果强制转换为适合 a ,而 a = a+3j 将名称 a 重新绑定到结果。

矩阵乘法

方法 描述
ndarray.__matmul__(self, value, /) 返回 self@value

tip 注意

Matrix 运算符 @@= 是在PEP465之后的Python 3.5中引入的。NumPy 1.10.0为测试目的初步实现了 @
进一步的文档可以在 matmul 文档中找到。

标准库函数运算

numpy对下列标准库方法进行了实现。

1
numpy:allany,argmax, argmin,argpartition,argsort,choose, clip,compress,copy,cumprod, cumsum,diagonal,imag,max, mean,min,nonzero,partition, prod,ptp,put,ravel,real, repeat,reshape,round, searchsorted,sort,squeeze,std, sum,swapaxes,take,trace, transpose,var

标准库函数的运算,基本都进行重写可以运算。

复制

方法 描述
ndarray.__copy__() 如果使用的copy.copy是所谓的数组上。
ndarray.__deepcopy__() 如果使用的copy.deepcopy是所谓的数组上。
ndarray.__reduce__() 用于 pickling。
ndarray.__setstate__(州,/) 用于unpickling。

基本定制:

方法 描述
ndarray.__new__(*args, **kwargs) 创建并返回一个新对象。
ndarray.__array__() 如果没有给出dtype,则返回对self的新引用;如果dtype与数组的当前dtype不同,则返回提供的数据类型的新数组。
ndarray.__array_wrap__()

容器定制

方法 描述
ndarray.__len__(self, /) 返回 len(self)。
ndarray.__getitem__(self, key, /) 返回 self[key]。
ndarray.__setitem__(self, key, value, /) 将 self[key] 设置为value。
ndarray.__contains__(self, key, /) 返回 self 的 key。

转换; 操作intfloatcomplex

它们仅适用于其中包含一个元素的数组,并返回相应的标量。

方法 描述
ndarray.__int__(self) none
ndarray.__float__(self) none
ndarray.__complex__() none

字符串表示:

方法 描述
ndarray.__str__(self, /) 返回 str(self)。
ndarray.__repr__(self, /) 返回 repr(self)。