我希望将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
我明白了:
TypeError:无法使用强制规则' same_kind'
将dtype(' float64')的ufunc乘法输出转换为dtype(' int16')
答案 0 :(得分:7)
解决此问题的两种方法:
您可以通过替换
解决此问题A *= B
A = (A * B)
或与
numpy.multiply(A, B, out=A, casting='unsafe')
答案 1 :(得分:3)
你可以使用broadcasting
乘以两个数组,只取整数部分,如下所示:
In [2]: (A*B).astype(int)
Out[2]: array([ 0, 4, 9, 16])
时间限制:
In [8]: %timeit (A*B).astype(int)
1000000 loops, best of 3: 1.65 µs per loop
In [9]: %timeit np.multiply(A, B, out=A, casting='unsafe')
100000 loops, best of 3: 2.01 µs per loop
答案 2 :(得分:2)
import numpy as np
A = np.float_(A)
A *= B
试试这个。我认为你失败的阵列类型不同。
演员