将numpy int和float数组相乘:无法从dtype转换ufunc multiply输出

时间:2016-07-30 11:39:31

标签: python arrays numpy floating-point int

我希望将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')

3 个答案:

答案 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

试试这个。我认为你失败的阵列类型不同。

演员