2016-07-30 68 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')