2017-12-11 47 views
5

में झूठी-सच्ची संक्रमण ढूँढना एक numpy सरणी को देखते हुए:एक numpy सरणी

x = np.array([False, True, True, False, False, False, False, False, True, False]) 

मैं असत्य से सत्य में मूल्यों बदलाव समय की संख्या कैसे पता करूं? उपरोक्त उदाहरण के लिए, उत्तर 2 होगा। I गिनती में गलत से गलत तक संक्रमण शामिल करना चाहते हैं।

How do I identify sequences of values in a boolean array? के उत्तरों से, निम्नलिखित सूचकांक उत्पन्न करते हैं जिन पर मूल्य बदलने वाले हैं, जो मैं नहीं चाहता क्योंकि इसमें ट्रू-फाल्स संक्रमण शामिल हैं।

np.argwhere(np.diff(x)).squeeze() 
# [0 2 7 8] 

मुझे पता है कि इस सरणी के माध्यम से पाशन द्वारा किया जा सकता है, तथापि मैं अगर वहाँ यह करने के लिए एक तेज़ तरीका था सोच रहा था?

उत्तर

8

जाओ एक बंद स्लाइस - x[:-1] (प्रथम ELEM से शुरू और दूसरा पिछले ELEM में समाप्त होने वाले) और x[1:] (दूसरा ELEM से शुरू और अंत तक चल रहा है), तो पहले टुकड़ा की तुलना में कम होने के लिए लग रही है दूसरा एक, यानी [False, True] के पैटर्न को पकड़ने और अंत में ndarray.sum() या np.count_nonzero() साथ गिनती पाने -

(x[:-1] < x[1:]).sum() 
np.count_nonzero(x[:-1] < x[1:]) 

एक और तरीका है पहले टुकड़ा False जा रहा है और True के रूप में एक दूसरे के लिए देखने के लिए हो सकता है, विचार फिर से करने के लिए किया जा रहा है उस पैटर्न को पकड़ें [False, True] -

(~x[:-1] & x[1:]).sum() 
np.count_nonzero(~x[:-1] & x[1:])