पायथन सूची संरचना में NumPy सरणी परिवर्तित करना?


297

कैसे मैं एक परिवर्तित NumPy एक अजगर सूची (उदाहरण के लिए करने के लिए सरणी [[1,2,3],[4,5,6]]), और यह काफी तेजी से करते हैं?

जवाबों:


427

उपयोग करें tolist():

import numpy as np
>>> np.array([[1,2,3],[4,5,6]]).tolist()
[[1, 2, 3], [4, 5, 6]]

ध्यान दें कि यह उन मूल्यों को धर्मान्तरित करता है जो उनके पास हो सकते हैं (जैसे np.int32 या np.float32) "निकटतम संगत पायथन प्रकार" (एक सूची में)। यदि आप संख्यात्मक डेटा प्रकारों को संरक्षित करना चाहते हैं, तो आप इसके बजाय अपने सरणी पर सूची () को कॉल कर सकते हैं, और आप खस्ता खोपड़ी की सूची के साथ समाप्त होंगे । (टिप्पणी में इसे इंगित करने के लिए Mr_and_Mrs_D को धन्यवाद।)


6
यदि आपकी सूची float32 है, tolistतो इसे floatss में बदल देंगे - यह संभव नहीं है। का उपयोग करने list(myarray)से यह पीड़ित नहीं है - हमें क्यों पसंद करना चाहिए tolist?
Mr_and_Mrs_D

1
@Mr_and_Mrs_D क्या आप यह सुझाव दे रहे हैं कि आपके एरे में तैरने के बावजूद, आप परिणामी सूची को पूर्णांक बनाना चाहेंगे? यह एक अलग तरह का सवाल है ... और निश्चित रूप से आपको यह बताना होगा कि फ्लोट 32 मान होने के बावजूद, वे सभी अभिन्न होने जा रहे हैं। वैसे भी, यदि आपके पास वह स्थिति थी, तो मुझे लगता है कि ऐसा myarray.astype(np.int32).tolist()करना एक विकल्प होगा, और जो आप पूरा करने की कोशिश कर रहे हैं उसके बारे में स्पष्ट है। (और अंत में, list(array_of_type_float32)पूर्णांक यहां नहीं देते हैं जब मैंने इसे आज़माया था ... इसलिए मुझे नहीं पता कि आप क्या पूछ रहे हैं।)
पीटर हैंनन

1
मैंने कभी भी पूर्णांक का उल्लेख नहीं किया - कोशिश करेंfloat32_array = np.array([0.51764709], np.float32); print(float32_array.tolist()); print(list(float32_array))
Mr_and_Mrs_D

2
ठीक है, इसलिए एक [फ़्लोट] में परिवर्तित हो जाता है और दूसरा खस्ता स्केलर फ़्लोट 32 प्रकार का उपयोग करता है, जैसा कि [np.float32]। ठीक। यह जानना अच्छा है, लेकिन मुझे लगता है कि यह वांछनीय है या नहीं यह प्रत्येक विशिष्ट मामले पर निर्भर करता है। इसके लायक क्या है, मुझे संदेह है कि आम तौर पर जब कोई (जैसे ओपी) किसी सूची में रूपांतरण के लिए कहता है, तो उनका तात्पर्य नियमित रूप से पायथन डेटा प्रकारों की एक सूची से है, इस मामले में या तो तैरता है या पूर्णांक होता है, और न कि खस्ता किस्म की सूची। । इसे इंगित करने के लिए धन्यवाद: मैंने उस बारे में एक नोट शामिल करने के लिए उत्तर को संपादित किया है।
पीटर हैनसेन

उन पंक्तियों के साथ: np.array([[0, 'one'], ['two', 3]]).tolist() -> [['0', 'one'], ['two', '3']]
कीथ्पजोलले

11

यदि खसरा सरणी आकार 2D है, तो numpy .tolist विधि नेस्टेड सूचियों का निर्माण करती है।

यदि फ्लैट सूची वांछित है, तो नीचे दी गई विधि काम करती है।

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`

5

tolist()एक नेस्टेड सरणी का सामना करने पर भी ठीक काम करता है, एक पांडा कहते हैं DataFrame;

my_list = [0,1,2,3,4,5,4,3,2,1,0]
my_dt = pd.DataFrame(my_list)
new_list = [i[0] for i in my_dt.values.tolist()]

print(type(my_list),type(my_dt),type(new_list))


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.