संपादित करें: यहां कुछ वास्तविक संख्याएं हैं! izip
, सूची समझ, और numpy
ऐसा करने के तरीके सभी एक ही गति के बारे में हैं।
# zip
>>> timeit.timeit("newlist = zip(*someList)[0]", setup = "someList = [range(1000000), range(1000000), range(1000000)]", number = 10)
1.4984046398561759
# izip
>>> timeit.timeit("newlist = izip(*someList).next()", setup = "someList = range(1000000), range(1000000), range(1000000)]; from itertools import izip", number = 10)
2.2186223645803693e-05
# list comprehension
>>> timeit.timeit("newlist = [li[0] for li in someList]", setup = "someList = [range(1000000), range(1000000), range(1000000)]", number = 10)
1.4677040212518477e-05
# numpy
>>> timeit.timeit("newlist = someList[0,:]", setup = "import numpy as np; someList = np.array([range(1000000), range(1000000), range(1000000)])", number = 10)
6.6217344397045963e-05
>>>
यह आप numpy
, जो सी में एक सरणी प्रकार implementes और इसलिए का उपयोग करना चाहिए जैसे बड़े डेटा संरचनाओं के लिए काफी अधिक कुशल है। यह उन सभी मैट्रिक्स मैनिपुलेशन भी प्रदान करता है जिन्हें आप कभी चाहेंगे।
>>> import numpy as np
>>> foo = np.array([[0,1,2],[3,4,5],[6,7,8]])
>>> foo[:,0]
array([0, 3, 6])
तुम भी स्थानांतरित कर सकते हैं ...
>>> foo.transpose()
array([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])
... n आयामी सरणियों के साथ काम ...
>>> foo = np.zeros((3,3,3))
>>> foo
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]])
>>> foo[0,...]
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
..do कुशल रेखीय बीजगणित ...
>>> foo = no.ones((3,3))
>>> np.linalg.qr(foo)
(array([[-0.57735027, 0.81649658, 0. ],
[-0.57735027, -0.40824829, -0.70710678],
[-0.57735027, -0.40824829, 0.70710678]]), array([[ -1.73205081e+00, -1.
73205081e+00, -1.73205081e+00],
[ 0.00000000e+00, -1.57009246e-16, -1.57009246e-16],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]]))
... और मूल रूप से anything that Matlab can करें।
वाह, बहुत बहुत धन्यवाद। यह अन्य समाधानों की तुलना में सुपर फास्ट है। अगर मैं +100000 कर सकता हूं तो मैं – Richard
@ रिचर्ड: यह निर्भर करता है ... सूची जितनी बड़ी होगी, उतनी ही बेहतर होगी कि इज़िप और सूची समझ समाधान सुस्त के खिलाफ प्रदर्शन करते हैं, क्योंकि वे मैट्रिक्स प्रविष्टियों के विशाल बहुमत पर विचार नहीं करते हैं। –
@ जेलीबीन: मुझे संदेह है कि ... numpy वास्तव में काफी अच्छी तरह अनुकूलित है। मुझे लगता है कि यह कहना सुरक्षित है कि एक साधारण कॉलम-वार स्लाइस पूरे मैट्रिक्स को नहीं पढ़ेगा। (हालांकि मैं निश्चित रूप से गलत हो सकता हूं, मुझे सी कार्यान्वयन के विवरणों को नहीं पता है।) असल में, मुझे लगता है कि 'numpy' को एक बड़ी सूची के साथ * बेहतर * करना चाहिए, क्योंकि पायथन के मूल' सूची 'प्रकार के उपरांत शुरू होते हैं कुल योग। लेकिन निश्चित रूप से, पता लगाने के लिए केवल एक ही रास्ता है! – katrielalex