खोज…


बूलियन सरणी के साथ डेटा फ़िल्टर करना

जब केवल एक तर्क को खांसी के लिए आपूर्ति की जाती है, 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]


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow