नहीं एक numpy व्यक्ति होने के नाते, मैं के साथ एक शॉट ले लिया: के अनुसार
>>> import numpy as np
>>> import itertools
>>>
>>> a = np.array([1,2,3,4,5,6,7,8,9])
>>> index=[2,3,6]
>>> a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))
>>> a
array([1, 2, 5, 6, 8, 9])
मेरे परीक्षण, यह numpy.delete()
से बेहतर प्रदर्शन करता है। मुझे नहीं पता कि यह मामला क्यों होगा, शायद शुरुआती सरणी के छोटे आकार के कारण?
python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
100000 loops, best of 3: 12.9 usec per loop
python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"
10000 loops, best of 3: 108 usec per loop
कि (करने के लिए मैं क्या उम्मीद कर रहा था विपरीत दिशा में) एक बहुत महत्वपूर्ण अंतर है, किसी को भी किसी भी विचार क्यों यह मामला होगा है?
और भी अजीब बात यह है कि numpy.delete()
गुजरने से सूची सूची के माध्यम से लूपिंग और इसे एकल सूचकांक देने से भी बदतर होती है।
python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "for i in index:" " np.delete(a, i)"
10000 loops, best of 3: 33.8 usec per loop
संपादित करें: यह सरणी के आकार के साथ ऐसा प्रतीत होता है। बड़े सरणी के साथ, numpy.delete()
काफी तेज़ है।
python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
10 loops, best of 3: 200 msec per loop
python -m timeit -s "import numpy as np" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "np.delete(a, index)"
1000 loops, best of 3: 1.68 msec per loop
जाहिर है, यह सब बहुत अप्रासंगिक के रूप में आप हमेशा स्पष्टता के लिए जाने के लिए और पहिया पुनर्रचना से बचना चाहिए है, लेकिन मैं इसे एक छोटे से रोचक लगा, इसलिए मैंने सोचा कि मैं इसे यहाँ छोड़ चाहते हैं।
आपको बहुत बहुत धन्यवाद। मैंने कोशिश की कि bur किसी कारण से काम नहीं कर सका। यह अब काम करता है –
@DanielThaagaardAndreasen मदद करने में सक्षम होने के लिए खुश है। – Levon
यह उत्तर भ्रामक है। Numpy.delete का दूसरा तर्क उस आइटम का सूचकांक नहीं है जिसे आप निकालना चाहते हैं, लेकिन वास्तविक वस्तु जिसे आप निकालना चाहते हैं। –