numpy
फ़िल्टरिंग डेटा
खोज…
बूलियन सरणी के साथ डेटा फ़िल्टर करना
जब केवल एक तर्क को खांसी के लिए आपूर्ति की जाती है, where
यह फ़ंक्शन इनपुट सरणी ( condition
) के सूचकांकों को लौटाता है जो कि सच के रूप में मूल्यांकन करता है ( numpy.nonzero
समान व्यवहार)। इसका उपयोग किसी ऐसे सरणी के सूचकांकों को निकालने के लिए किया जा सकता है जो किसी दिए गए शर्त को पूरा करते हैं।
import numpy as np
a = np.arange(20).reshape(2,10)
# a = array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
# Generate boolean array indicating which values in a are both greater than 7 and less than 13
condition = np.bitwise_and(a>7, a<13)
# condition = array([[False, False, False, False, False, False, False, False, True, True],
# [True, True, True, False, False, False, False, False, False, False]], dtype=bool)
# Get the indices of a where the condition is True
ind = np.where(condition)
# ind = (array([0, 0, 1, 1, 1]), array([8, 9, 0, 1, 2]))
keep = a[ind]
# keep = [ 8 9 10 11 12]
यदि आपको सूचकांकों की आवश्यकता नहीं है, तो इसे extract
का उपयोग करके एक चरण में प्राप्त किया जा सकता है, जहां आप condition
को पहले तर्क के रूप में निर्दिष्ट करते condition
, लेकिन उन मानों को वापस करने के लिए array
देते हैं जहां से स्थिति दूसरे तर्क के रूप में सत्य है।
# np.extract(condition, array)
keep = np.extract(condition, a)
# keep = [ 8 9 10 11 12]
दो और तर्क x
और y
को आपूर्ति की जा सकती है where
किस स्थिति में, आउटपुट में x
के मान शामिल होंगे जहां स्थिति True
और y
के मान जहां स्थिति False
।
# Set elements of a which are NOT greater than 7 and less than 13 to zero, np.where(condition, x, y)
a = np.where(condition, a, a*0)
print(a)
# Out: array([[ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9],
# [10, 11, 12, 0, 0, 0, 0, 0, 0, 0]])
सीधे सूचकांकों को छानना
साधारण मामलों के लिए, आप डेटा को सीधे फ़िल्टर कर सकते हैं।
a = np.random.normal(size=10)
print(a)
#[-1.19423121 1.10481873 0.26332982 -0.53300387 -0.04809928 1.77107775
# 1.16741359 0.17699948 -0.06342169 -1.74213078]
b = a[a>0]
print(b)
#[ 1.10481873 0.26332982 1.77107775 1.16741359 0.17699948]