正如这里和这里所提到的,这在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
Run Code Online (Sandbox Code Playgroud)
解决方法是:
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)
Run Code Online (Sandbox Code Playgroud)
但这对于每个矩阵操作来说都太长了!
如何在*=默认情况下覆盖numpy 运算符来执行此操作?
我应该继承一些东西吗?
我正在使用wavefile.read()Python将音频文件导入Python.我想要的是读取一个音频文件,其中每个样本都是double,并标准化为-1.0到+1.0,类似于Matlab audioread()函数.我该怎么做 ?
我有一个numpy数组:
>>> b
array([[ 2, 2],
[ 6, 4],
[10, 6]])
Run Code Online (Sandbox Code Playgroud)
我想将第一列乘以浮点数,结果我需要int数,因为当我这样做时:
>>> b[:,0] *= 2.1
Run Code Online (Sandbox Code Playgroud)
它说:
TypeError: Cannot cast ufunc multiply output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)
我需要看起来像这样的数组:
array([[ 4, 2],
[12, 4],
[21, 6]])
Run Code Online (Sandbox Code Playgroud)