Python에서 numpynd array의 non-NaN 요소 수 계산
numpind 배열 행렬에서 non-NaN 원소의 개수를 계산해야 합니다.파이썬에서 이것을 어떻게 효율적으로 할 수 있을까요?이를 달성하기 위한 간단한 코드는 다음과 같습니다.
import numpy as np
def numberOfNonNans(data):
count = 0
for i in data:
if not np.isnan(i):
count += 1
return count
이것에 내장된 기능이 numpy에 있습니까?저는 빅 데이터 분석을 하고 있기 때문에 효율성이 중요합니다.
도와주셔서 감사합니다!
np.count_nonzero(~np.isnan(data))
~
다음에서 반환되는 부울 행렬을 반전합니다.np.isnan
.
np.count_nonzero
0\false이 아닌 값을 카운트합니다..sum
동일한 결과를 제공해야 합니다.하지만 아마도 더 명확하게 사용할 수 있을 것입니다.count_nonzero
테스트 속도:
In [23]: data = np.random.random((10000,10000))
In [24]: data[[np.random.random_integers(0,10000, 100)],:][:, [np.random.random_integers(0,99, 100)]] = np.nan
In [25]: %timeit data.size - np.count_nonzero(np.isnan(data))
1 loops, best of 3: 309 ms per loop
In [26]: %timeit np.count_nonzero(~np.isnan(data))
1 loops, best of 3: 345 ms per loop
In [27]: %timeit data.size - np.isnan(data).sum()
1 loops, best of 3: 339 ms per loop
data.size - np.count_nonzero(np.isnan(data))
여기서 가장 빠른 것 같습니다다른 데이터는 다른 상대 속도 결과를 제공할 수 있습니다.
쓰기가 빠른 대안
가장 빠른 선택은 아니지만 성능이 문제가 되지 않는다면 다음을 사용할 수 있습니다.
sum(~np.isnan(data))
.
성능:
In [7]: %timeit data.size - np.count_nonzero(np.isnan(data))
10 loops, best of 3: 67.5 ms per loop
In [8]: %timeit sum(~np.isnan(data))
10 loops, best of 3: 154 ms per loop
In [9]: %timeit np.sum(~np.isnan(data))
10 loops, best of 3: 140 ms per loop
배열이 희소한지 여부를 확인하려면 nan 값의 비율을 얻는 데 도움이 될 수 있습니다.
np.isnan(ndarr).sum() / ndarr.size
해당 비율이 임계값을 초과하는 경우 희소 배열(예: https://sparse.pydata.org/en/latest/ )을 사용합니다.
하지만 좀 더 느린 대안은 색인을 통해 작업하는 것입니다.
np.isnan(data)[np.isnan(data) == False].size
In [30]: %timeit np.isnan(data)[np.isnan(data) == False].size
1 loops, best of 3: 498 ms per loop
의 이중 사용.np.isnan(data)
그리고.==
오퍼레이터가 좀 오버킬을 할 수도 있어서 완성도를 위해서만 답을 올렸습니다.
len([i for i in data if np.isnan(i) == True])
언급URL : https://stackoverflow.com/questions/21778118/counting-the-number-of-non-nan-elements-in-a-numpy-ndarray-in-python
'source' 카테고리의 다른 글
사이트 간 AJAX 요청 (0) | 2023.10.12 |
---|---|
Oracle STANDARD_PLSQL에서 해시를 사용할 수 없습니까? (0) | 2023.10.12 |
R Studio를 이용한 digital ocean의 mariaDB 연결 (0) | 2023.10.07 |
스프링 - applicationContext.xml이 없으므로 열 수 없습니다. (0) | 2023.10.07 |
부트스트랩 중앙 수직 및 수평 정렬 (0) | 2023.10.07 |