10运算复写
基本运算
算术和比较操作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 += 3j 与 a = 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:all,any,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。 |
转换; 操作int,float 和 complex。
它们仅适用于其中包含一个元素的数组,并返回相应的标量。
| 方法 | 描述 |
|---|---|
| ndarray.__int__(self) | none |
| ndarray.__float__(self) | none |
| ndarray.__complex__() | none |
字符串表示:
| 方法 | 描述 |
|---|---|
| ndarray.__str__(self, /) | 返回 str(self)。 |
| ndarray.__repr__(self, /) | 返回 repr(self)。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!








