programing

NumPy bool 배열의 참 요소 수를 계산하는 방법

newsource 2022. 9. 29. 00:21

NumPy bool 배열의 참 요소 수를 계산하는 방법

부울형 NumPy 배열 'boolar'가 있습니다.값이 다음과 같은 요소의 수를 세고 싶다.True이 태스크 전용 NumPy 또는 Python 루틴이 있습니까?아니면 스크립트의 요소를 반복해야 합니까?

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

boolarr.sum()
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)

>>> boolarr.sum()
5

물론 그건bool-특정 답변.보다 일반적으로는,numpy.count_nonzero.

>>> np.count_nonzero(boolarr)
5

그 질문은 저에게 매우 유사한 질문을 해결했고, 저는 공유해야 한다고 생각했습니다.

raw python에서는sum()세다True의 값list:

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

하지만 이 방법은 작동하지 않습니다.

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

2개의 numpy 어레이를 비교하고 일치수(예를 들어 머신러닝에서의 올바른 클래스 예측)를 세는 것에 관해서, 다음의 2차원의 예를 유용하게 했습니다.

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

boolarr.sum(axis=1 or axis=0)

축 = 1은 행의 연도 수를 출력하고 축 = 0은 열의 연도 수를 카운트합니다.

boolarr[[true,true,true],[false,false,true]]
print(boolarr.sum(axis=1))

(3,1)가 됩니다.

b[b].size

어디에b는 문제의 Boolean ndarray 입니다.필터 처리b위해서True필터링된 배열의 길이를 계산합니다.

이것은 아마 효율적이지 않을 것이다.np.count_nonzero()를 참조해 주세요.단, 다른 구문을 잊어버렸을 경우에 편리합니다.게다가 이 짧은 구문은 프로그래머의 시간을 절약합니다.

데모:

In [1]: a = np.array([0,1,3])

In [2]: a
Out[2]: array([0, 1, 3])

In [3]: a[a>=1].size
Out[3]: 2

In [5]: b=a>=1

In [6]: b
Out[6]: array([False,  True,  True])

In [7]: b[b].size
Out[7]: 2

1D 어레이의 경우 다음과 같은 이점이 있습니다.

import numpy as np
numbers= np.array([3, 1, 5, 2, 5, 1, 1, 5, 1, 4, 2, 1, 4, 5, 3, 4, 
                  5, 2, 4, 2, 6, 6, 3, 6, 2, 3, 5, 6, 5])

numbersGreaterThan2= np.count_nonzero(numbers> 2)

언급URL : https://stackoverflow.com/questions/8364674/how-to-count-the-number-of-true-elements-in-a-numpy-bool-array