से पंक्तियों का चयन करना मैं दूसरे कॉलम में मान के आधार पर NumPy सरणी से केवल कुछ पंक्तियों का चयन करना चाहता हूं। उदाहरण के लिए, इस परीक्षण सरणी में दूसरे कॉलम में 1 से 10 के पूर्णांक हैं।NumPy ndarray
>>> test = numpy.array([numpy.arange(100), numpy.random.randint(1, 11, 100)]).transpose()
>>> test[:10, :]
array([[ 0, 6],
[ 1, 7],
[ 2, 10],
[ 3, 4],
[ 4, 1],
[ 5, 10],
[ 6, 6],
[ 7, 4],
[ 8, 6],
[ 9, 7]])
यदि मैं केवल पंक्तियों जहां दूसरी मान 4 है चाहता था, यह आसान है:
>>> test[test[:, 1] == 4]
array([[ 3, 4],
[ 7, 4],
[16, 4],
...
[81, 4],
[83, 4],
[88, 4]])
लेकिन मैं एक ही परिणाम कैसे प्राप्त करते हैं जब वहाँ है एक से अधिक मूल्य चाहते थे?
वांछित सूची मनमाने ढंग से लंबाई का हो सकता है। उदाहरण के लिए, मैं सभी पंक्तियों चाहते हो सकता है, जहां दूसरे स्तंभ या तो 2, 4 या 6 है:
>>> wanted = [2, 4, 6]
एक ही रास्ता मैं के साथ आए हैं सूची समझ का उपयोग करने के लिए और फिर एक सरणी में इस वापस परिवर्तित है और लगता है बहुत गड़बड़, हालांकि यह काम करता है:
>>> test[numpy.array([test[x, 1] in wanted for x in range(len(test))])]
array([[ 0, 6],
[ 3, 4],
[ 6, 6],
...
[90, 2],
[91, 6],
[92, 2]])
क्या न्यूमपी में ऐसा करने का कोई बेहतर तरीका है कि मुझे याद आ रही है?
यह समाधान सरणी लेन (वांछित) समय के माध्यम से चला जाता है। एक ही पास में सरणी के माध्यम से जाना आमतौर पर तेज़ होता है। – EOL
धन्यवाद अम्नोन। यह वह समाधान है जिसे मैंने स्वीकार करने का फैसला किया।मुझे लगता है कि यह समझना स्पष्ट है और मेरे मूल समाधान से लगभग 20 x तेज है। –
क्या होगा यदि मैं स्तंभ में सशर्त मूल्यों के साथ कुछ पंक्तियों का चयन करना चाहता हूं? उदाहरण के लिए, मैं उन सभी पंक्तियों का चयन करना चाहता हूं जिनके स्तंभ 1 में 5 से 10 की सीमा में मूल्य हैं। 'परीक्षण [परीक्षण [:, 1]> 4 और परीक्षण [:, 1] <8] '। – Shyamkkhadka