127

以下のように、numpy 配列をゼロで初期化します。

np.zeros((N,N+1))

しかし、指定された n*n numpy 配列行列のすべての要素がゼロかどうかを確認するにはどうすればよいでしょうか。
すべての値が実際にゼロの場合、メソッドは True を返す必要があります。

4

7 に答える 7

201

ここに投稿された他の回答は機能しますが、使用する最も明確で最も効率的な機能は次のnumpy.any()とおりです。

>>> all_zeros = not np.any(a)

また

>>> all_zeros = not a.any()
  • numpy.all(a==0)RAM の使用量が少ないため、これよりも優先されます。(用語によって作成された一時配列は必要ありませんa==0。)
  • numpy.count_nonzero(a)また、最初の非ゼロ要素が見つかったときにすぐに戻ることができるため、より高速です。
    • 編集: @Rachel がコメントで指摘したように、np.any()「短絡」ロジックを使用しなくなったため、小さな配列の速度の利点は見られません。
于 2014-05-09T15:03:51.763 に答える
85

numpy.count_nonzeroをチェックしてください。

>>> np.count_nonzero(np.eye(4))
4
>>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]])
5
于 2013-08-23T06:08:53.133 に答える
62

配列がある場合は、ここで np.all を使用します。

>>> np.all(a==0)
于 2013-08-23T12:19:45.510 に答える
2

これは機能します。

def check(arr):
    if np.all(arr == 0):
        return True
    return False
于 2021-01-08T15:28:26.920 に答える
-8

別の numpy 関数での警告を回避するためにすべてのゼロをテストしている場合は、行を try でラップします。ただし、ブロックを除いて、関心のある操作の前にゼロのテストを行う必要がなくなります。

try: # removes output noise for empty slice 
    mean = np.mean(array)
except:
    mean = 0
于 2016-11-30T10:10:25.397 に答える