python - 在 numpy 中重新定义 *= 运算符

标签 python arrays numpy subclass

作为mentioned herehere ,这在 numpy 1.7+ 中不再有效:

import numpy
A = numpy.array([1, 2, 3, 4], dtype=numpy.int16)
B = numpy.array([0.5, 2.1, 3, 4], dtype=numpy.float64)
A *= B

解决方法是:

def mult(a,b):
    numpy.multiply(a, b, out=a, casting="unsafe")

def add(a,b):
    numpy.add(a, b, out=a, casting="unsafe")

mult(A,B)

但是对于每个矩阵操作来说写起来太长了!

如何覆盖 numpy *= 运算符以默认执行此操作?

我应该继承一些东西吗?

最佳答案

您可以使用np.set_numeric_ops 来覆盖数组运算方法:

import numpy as np

def unsafe_multiply(a, b, out=None):
    return np.multiply(a, b, out=out, casting="unsafe")

np.set_numeric_ops(multiply=unsafe_multiply)

A = np.array([1, 2, 3, 4], dtype=np.int16)
B = np.array([0.5, 2.1, 3, 4], dtype=np.float64)
A *= B

print(repr(A))
# array([ 0,  4,  9, 16], dtype=int16)

关于python - 在 numpy 中重新定义 *= 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673878/

相关文章:

python - 在笔记本中获取Bokeh的选择

python - 如何将多键字典转换为 Pandas 数据框,其中每个键和值都有自己的列?

python - 如何抓取 URL 中包含页码的多个页面

python - 如果满足条件,则使用自定义函数应用于 df 列

c++ - 将一种类型的数组转换为另一种类型

python - 在 Python NumPy 中,维度和轴是什么?

ios - Swift 将数组数组映射到元组数组 - 'map' 生成 [T],而不是预期的

PHP:在特定短语/单词和输出后搜索文本文件

python-3.x - 使用 OpenCV 或 PIL 将 Numpy 数组转换为图像

python - 根据条件在多个数据帧的数据帧内的列之间交换行