2016-11-18 20 views
0

ゼロ(0)または1だけを含むことができるサイズ(n、m)のnumpy配列を初期化したいとします。 さらに、後でnp.bitwise_orまたは配列を使用したいと思います。例えばndarraysのnp.ndarray bitwise_or演算子が失敗します

は、私がしようとした場合:

import numpy as np 
myArray = np.zeros([4,4]) 
myRow = myArray[1,] 
myCol = myArray[,1] 
np.bitwise_or(myRow, myCol) 

それは失敗します。

TypeError: ufunc 'bitwise_or' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 

がどのように私は同様の方法でなく、エラーなしでこれを行うことができますか?

私がしようとした場合、

np.bitwise_or([0,0,0,0], [0,0,0,0]) 

それが実際に動作します。

答えて

2

デフォルトでは、np.zerosはfloat dtypeを使用し、浮動小数点数に対してビット単位の演算を実行することはできません。 np.bitwise_or([0,0,0,0], [0,0,0,0])は整数に作用し、それがなぜ機能するのですか?

あなたがmyArrayを構築するとき、それはあまりにもうまくいく代わりに、整数DTYPEを渡す場合:

In [9]: myArray = np.zeros([4,4], dtype=int) 

In [10]: myRow = myArray[1,:] 

In [11]: myCol = myArray[:,1] 

In [12]: np.bitwise_or(myRow, myCol) 
Out[12]: array([0, 0, 0, 0]) 

または我々はastype(int)を呼び出すことができます。

In [14]: myArray = np.array([[1.0,0.0,1.0,0.0], [1.0,1.0,1.0,0.0]]) 

In [15]: np.bitwise_or(myArray[0].astype(int), myArray[1].astype(int)) 
Out[15]: array([1, 1, 1, 0]) 

あなたは、配列を知っていれば、と述べました常に0または1しか含まれない場合は、

In [21]: myArray = myArray.astype(bool) 

In [22]: np.bitwise_or(myArray[0], myArray[1]) 
Out[22]: array([ True, True, True, False], dtype=bool) 
の代わりに bool配列を使用してください。 0
関連する問題