मैं NumPy सरणी को एक पायथन सूची में कैसे परिवर्तित करूं (उदाहरण के लिए [[1,2,3],[4,5,6]]
), और यह उचित रूप से तेज़ करता है?पाइथन सूची संरचना में NumPy सरणी को परिवर्तित करना?
156
A
उत्तर
236
उपयोग tolist()
:
import numpy as np
>>> np.array([[1,2,3],[4,5,6]]).tolist()
[[1, 2, 3], [4, 5, 6]]
ध्यान दें कि यह मान जो कुछ numpy प्रकार से हो सकने को धर्मान्तरित (जैसे np.int32 या np.float32) "निकटतम संगत अजगर प्रकार" (किसी सूची में) करने के लिए । यदि आप numpy डेटा प्रकारों को संरक्षित करना चाहते हैं, तो आप इसके बजाय अपनी सरणी पर सूची() कॉल कर सकते हैं, और आप numpy scalars की एक सूची के साथ समाप्त हो जाएंगे। एक tolist method (एक टिप्पणी में उनका कहना है कि के लिए Mr_and_Mrs_D के लिए धन्यवाद।)
37
NumPy सरणी है:
In [1]: arr=np.array([[1,2,3],[4,5,6]])
In [2]: arr.tolist()
Out[2]: [[1, 2, 3], [4, 5, 6]]
3
numpy .tolist विधि नेस्टेड सरणियों का उत्पादन करता है, तो numpy सरणी आकार 2 डी है।
यदि फ्लैट सूचियां वांछित हैं, तो नीचे दी गई विधि काम करती है।
import numpy as np
from itertools import chain
a = [1,2,3,4,5,6,7,8,9]
print type(a), len(a), a
npa = np.asarray(a)
print type(npa), npa.shape, "\n", npa
npa = npa.reshape((3, 3))
print type(npa), npa.shape, "\n", npa
a = list(chain.from_iterable(npa))
print type(a), len(a), a`
यदि आपकी सूची फ्लोट 32 'टॉलिस्ट' है तो इसे 'फ्लोट्स' में परिवर्तित कर देगी - जो शायद वांछित नहीं है। 'सूची (myarray)' का उपयोग इस से पीड़ित नहीं है - हमें 'सूची' क्यों पसंद करना चाहिए? –
@Mr_and_Mrs_D क्या आप सुझाव दे रहे हैं कि, आपके सरणी में तैरने के बावजूद, आप परिणामस्वरूप सूची पूर्णांक होना चाहते हैं? यह एक अलग सवाल है ... और निश्चित रूप से आपको यह निर्दिष्ट करना होगा कि फ्लोट 32 मान होने के बावजूद, वे सभी अभिन्न होने जा रहे हैं। वैसे भी, अगर आपके पास वह स्थिति थी, तो मुझे लगता है कि 'myarray.astype (np.int32) .tolist()' एक विकल्प होगा, और जो आप पूरा करने की कोशिश कर रहे हैं उसके बारे में स्पष्ट होगा। (और आखिरकार, 'सूची (array_of_type_float32)' जब मैंने कोशिश की तो मैं पूर्णांक नहीं देता ... इसलिए मुझे नहीं पता कि आप क्या पूछ रहे हैं।) –
मैंने कभी पूर्णांक का उल्लेख नहीं किया - 'float32_array = np.array ([0.5176470 9], एनपी.फ्लोट 32); प्रिंट (float32_array.tolist()); प्रिंट (सूची (float32_array)) ' –