답변:
여러 옵션이 있습니다. 두 가지 옵션은 다음과 같습니다.
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
bool
: 산술 연산에서 부울 값은 1과 0으로 처리됩니다. Python 표준 라이브러리 문서에서 " 부울 값 "을 참조하십시오 . NumPy bool
와 Python bool
은 동일하지 않지만 호환 가능합니다 ( 자세한 내용 은 여기 참조 ).
numpy.count_nonzero
NumPy v1.5.1 에 있지 않은 것에 관해서 는 : 당신이 맞습니다. 이 릴리스 발표 에 따르면 NumPy v1.6.0에 추가되었습니다.
numpy.count_nonzero
는 적어도 파이썬 인터프리터에서 약 1000 배 빠릅니다. python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "np.count_nonzero(bools)"
vs.python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "sum(bools)"
np.sum(bools)
대신에 비교해야 합니다! 그러나 np.count_nonzero(bools)
여전히 ~ 12 배 빠릅니다.
그 질문은 나에게 매우 비슷한 질문을 해결했으며 공유해야한다고 생각했습니다.
원시 파이썬에서는 다음의 값 sum()
을 계산 하는 데 사용할 수 있습니다 .True
list
>>> 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