2016-07-30 127 views
3

我想乘的int16阵列但float阵列,具有自动四舍五入,但这种失败:乘numpy的int和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: Cannot cast ufunc multiply output from dtype('float64') to dtype('int16') with casting rule 'same_kind'

+0

看起来''numpy.multiply(A,B,out = A,cast ='unsafe')''是可能的,但语法要长很多! 默认情况下有没有办法在numpy中设置casting ='unsafe'? – Basj

+0

查看https://github.com/numpy/numpy/pull/6499/files – Basj

回答

2

你可以使用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 
+0

OP想要进行乘法运算 –

+0

它与'numpy.multiply(A,B,out = A,casting = '不安全')? – Basj

+0

@ali_m OP没有提到他们想要进行乘法运算。他们唯一的评论是,更长的方式是“方式更长的语法”。 – SethMMorton

2
import numpy as np 

A = np.float_(A) 
A *= B 

尝试。我认为是不同的数组类型,你会失败。

演员

1

2种方法来解决这个问题:

您可以通过

A = (A * B) 

或更换

A *= B 

解决这个

numpy.multiply(A, B, out=A, casting='unsafe')