Bas*_*asj 11 python arrays floating-point int numpy
我想将一个int16数组乘以一个float数组,并使用自动舍入,但这会失败:
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)
我明白了:
TypeError:无法使用强制转换规则'same_kind'将dtype('float64')的ufunc乘法输出转换为dtype('int16')
解决这个问题的两种方法:
您可以通过替换来解决此问题
A *= B
Run Code Online (Sandbox Code Playgroud)
同
A = (A * B)
Run Code Online (Sandbox Code Playgroud)
或用
numpy.multiply(A, B, out=A, casting='unsafe')
Run Code Online (Sandbox Code Playgroud)
您可以将broadcasting两个数组相乘并仅取整数部分,如下所示:
In [2]: (A*B).astype(int)\nOut[2]: array([ 0, 4, 9, 16])\nRun Code Online (Sandbox Code Playgroud)\n\n时间限制:
\n\nIn [8]: %timeit (A*B).astype(int)\n1000000 loops, best of 3: 1.65 \xc2\xb5s per loop\n\nIn [9]: %timeit np.multiply(A, B, out=A, casting=\'unsafe\')\n100000 loops, best of 3: 2.01 \xc2\xb5s per loop\nRun Code Online (Sandbox Code Playgroud)\n