2012-04-27 24 views
77

में सूचियों की सूची मैं सूचियों की एक साधारण सूची को एक numpy सरणी में कैसे परिवर्तित करूं? पंक्तियों में व्यक्तिगत उपन्यास होते हैं और प्रत्येक पंक्ति में उपन्यास में तत्व होते हैं।numpy array

उत्तर

68
>>> numpy.array([[1, 2], [3, 4]]) 
array([[1, 2], [3, 4]]) 
+3

आरईपीएल कोई उल्लेखनीय शुरुआत सवाल पर नीचे काटने का मतलब । –

+8

यह स्वचालित रूप से 2 डी सरणी में सूची की एक सूची को रूपांतरित करता है क्योंकि सभी शामिल सूचियों की लंबाई समान होती है। क्या आप जानते हैं कि ऐसा नहीं करना है: सूची की सरणी बनाएं, भले ही सभी सूचियों की लंबाई समान हो? या 1 डी सरणी के 1 डी सरणी में एक 2 डी सरणी को परिवर्तित करना संभव है (कुशलता से मेरा मतलब है, कोई पुनरावृत्ति विधि या पायथन नक्शा सामग्री नहीं) –

+3

यदि यह आपके लिए काम नहीं करता है क्योंकि आपके उपन्यास भी आकार के नहीं हैं, तो देखें [ निम्नलिखित उत्तर] (http://stackoverflow.com/a/26224619/1449460)। –

9

यह रूप में आसान है के रूप में:

>>> lists = [[1, 2], [3, 4]] 
>>> np.array(lists) 
array([[1, 2], 
     [3, 4]]) 
76

सूचियों की अपनी सूची इग्नेसियो वेज़क्वेज़-अब्राम के जवाब से तत्वों से काम नहीं चलेगा की संख्या अलग-अलग सूचियों है।

1) सरणियों की एक सरणी बनाएँ::

x=[[1,2],[1,2,3],[1]] 
y=numpy.array([numpy.array(xi) for xi in x]) 
type(y) 
>>><type 'numpy.ndarray'> 
type(y[0]) 
>>><type 'numpy.ndarray'> 

2) सूचियों की एक सरणी बनाएँ:

x=[[1,2],[1,2,3],[1]] 
y=numpy.array(x) 
type(y) 
>>><type 'numpy.ndarray'> 
type(y[0]) 
>>><type 'list'> 

3) सबसे पहले सूचियों लंबाई में बराबर इसके बजाय वहाँ 3 विकल्प हैं:

x=[[1,2],[1,2,3],[1]] 
length = len(sorted(x,key=len, reverse=True)[0]) 
y=numpy.array([xi+[None]*(length-len(xi)) for xi in x]) 
y 
>>>array([[1, 2, None], 
>>>  [1, 2, 3], 
>>>  [1, None, None]], dtype=object) 
+7

धन्यवाद, इसके लिए यहां आया था। थोड़ी देर के लिए numpy का उपयोग कर रहा है, और यह व्यवहार गैर-तुच्छ पाया। इस सामान्य मामले को समझाने के लिए समय निकालने के लिए धन्यवाद। –

+0

इस उत्तर के लिए अंगूठे ऊपर! – alisa

15

यह एक Numpy सरणी में सूचियों की एक सूची परिवर्तित करने के लिए गूगल पर शीर्ष खोज है, मैं निम्नलिखित प्रदान करेंगे प्रश्न 4 वर्ष होने के बावजूद:

>>> x = [[1, 2], [1, 2, 3], [1]] 
>>> y = numpy.hstack(x) 
>>> print(y) 
[1 2 1 2 3 1] 

जब मैं पहली बार यह इस तरह से कर रही है के बारे में सोचा, मैं खुद के साथ काफी खुश था क्योंकि यह soooo आसान है। हालांकि, सूचियों का एक बड़ा सूची के साथ यह समय के बाद, यह वास्तव में यह करने के लिए तेजी से होता है:

>>> y = numpy.concatenate([numpy.array(i) for i in x]) 
>>> print(y) 
[1 2 1 2 3 1] 

ध्यान दें कि @ Bastiaan के जवाब # 1 एक सतत सूची नहीं है, इसलिए मैं concatenate गयी।

वैसे भी ... मैं hstack दृष्टिकोण को नम्पी के सुरुचिपूर्ण उपयोग के लिए पसंद करता हूं।

0

फिर, एक एन आयामी सरणी में एन के स्तर के साथ नीडिंत सूचियों परिवर्तित करने की समस्या के लिए खोज करने के बाद मैं कुछ भी नहीं मिला है, तो यहां मेरे रास्ते उसके चारों ओर है:

import numpy as np 

new_array=np.array([[[coord for coord in xk] for xk in xj] for xj in xi], ndmin=3) #this case for N=3