2017-09-04 25 views
0

配列にゼロ以外の数値が検出された場合にprintステートメントを与えるコードを作成したいと思います。次のように私が持っている試みは、次のとおりです。配列内の非ゼロ要素の検索

if numpy.where(array != 0): 
    print "NonZero element detected!" 
elif numpy.where(array ==0): 
    print "All elements are zero" 

私はまたnumpy.nonzeroコマンドを知っているが、私は実際に働いて印刷されたステートメントのこの場合、他のスタイルを取得したいのですが、私は組み込むするかどうかはわかりませんPythonのロジックが正しく動作します。私は論理がゼロになるよりも機能するようになっています。私が持っているものは、「非ゼロ要素が検出されました!ステートメントは、配列に非ゼロがあるかどうかにかかわらず。どのようにこれを実装するためのアイデアですか?

+0

'where'は配列のタプルを返します。次元ごとに1つの配列です。非ゼロでない場合、それらの配列は形状(0、)、すなわち要素を持たない。したがって、 'where'を使うと、それらの配列の長さをチェックする必要があります。インタラクティブなセッションで 'どこで'を試してみることをお勧めします。その結果を見ると、これがより明確になるはずです。 – hpaulj

答えて

2

をあなたはanyはビルトイン使用することができます。

trueを返します(存在する場合) iterableの要素はtrueです。 iterableが空の場合はFalseを返します。ボーナスとして

if any(elt != 0 for elt in array): 
    print("Non zero detected") 
else: 
    print("All elements are zero") 

ブールワイズFalseに評価要素のみが0であれば、あなたは簡単に行うことができます。

if any(array): 
    print("Non zero detected") 
else: 
    print("All elements are zero") 
1

あなたは条件文を使用してマスクを作成することができます:あなたが連鎖することができ

mask = array == 0 
print(mask) 
array([ True, False, False, True], dtype=bool) 

これを.all.any呼び出して、あなたのユースケースに応じました。あなたはすべての要素がゼロであるかどうかを確認したい場合は、行いたい:

if (array == 0).all(): 
    print('All elements are 0!') 

か、そうで

if (array != 0).any(): 
    print('Non-zero elements detected!') 

と。


あなたは限り、あなたは2つの引数を提供してnp.maskを使用して同じことを行うことができます。

mask = np.where(array == 0, True, False) 
print(mask) 
array([ True, False, False, True], dtype=bool) 
1

あなたは非の検出のために純粋に探しているなら配列のゼロ要素、なぜこのようなことをしないのですか?何か不足していますか?

arr_1 = (1,2,4,6,7,88,9) 
arr_2 = (1,2,4,6,0,7,88,9) 

print if 0 in arr_1 'Non zero detected' else 'There is no zero in array' 
+1

'print 'にするべきではありませんmsg1"配列elseに0があれば "msg2" '? –

関連する問題