[python] NumPy bool 배열에서 실제 요소 수를 계산하는 방법

부울 형식의 NumPy 배열 ‘boolarr’이 있습니다. 값이 인 요소의 수를 세고 싶습니다 True. 이 작업을위한 NumPy 또는 Python 루틴이 있습니까? 또는 스크립트의 요소를 반복해야합니까?



답변

여러 옵션이 있습니다. 두 가지 옵션은 다음과 같습니다.

numpy.sum(boolarr)
numpy.count_nonzero(boolarr)

예를 들면 다음과 같습니다.

>>> import numpy as np
>>> boolarr = np.array([[0, 0, 1], [1, 0, 1], [1, 0, 1]], dtype=np.bool)
>>> boolarr
array([[False, False,  True],
       [ True, False,  True],
       [ True, False,  True]], dtype=bool)

>>> np.sum(boolarr)
5

물론 이것은 bool특정 답변입니다. 보다 일반적으로을 사용할 수 있습니다 numpy.count_nonzero.

>>> np.count_nonzero(boolarr)
5


답변

그 질문은 나에게 매우 비슷한 질문을 해결했으며 공유해야한다고 생각했습니다.

원시 파이썬에서는 다음의 값 sum()을 계산 하는 데 사용할 수 있습니다 .Truelist

>>> sum([True,True,True,False,False])
3

그러나 이것은 작동하지 않습니다 :

>>> sum([[False, False, True], [True, False, True]])
TypeError...


답변

두 개의 numpy 배열을 비교하고 일치 횟수를 계산하는 관점 (예 : 기계 학습의 올바른 클래스 예측)에서 두 가지 차원에 대한 아래 예제가 유용하다는 것을 알았습니다.

import numpy as np
result = np.random.randint(3,size=(5,2)) # 5x2 random integer array
target = np.random.randint(3,size=(5,2)) # 5x2 random integer array

res = np.equal(result,target)
print result
print target
print np.sum(res[:,0])
print np.sum(res[:,1])

이는 D 치수로 확장 될 수 있습니다.

결과는 다음과 같습니다.

예측:

[[1 2]
 [2 0]
 [2 0]
 [1 2]
 [1 2]]

표적:

[[0 1]
 [1 0]
 [2 0]
 [0 0]
 [2 1]]

D = 1에 대한 올바른 예측 횟수 : 1

D = 2에 대한 올바른 예측 횟수 : 2


답변