নাম্পার অ্যারেতে তালিকার তালিকা


182

আমি কীভাবে তালিকার একটি সাধারণ তালিকাটিকে একটি অদ্ভুত অ্যারে রূপান্তর করব? সারিগুলি পৃথক সাবলিস্ট হয় এবং প্রতিটি সারিতে সাব-লিস্টের উপাদান থাকে।

উত্তর:


197

যদি আপনার তালিকাগুলির তালিকায় বিবিধ সংখ্যক উপাদানের তালিকা থাকে তবে Ignacio Vazquez-Abram- এর উত্তর কাজ করবে না। পরিবর্তে কমপক্ষে 3 টি বিকল্প রয়েছে:

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) প্রথমে তালিকা সমান দৈর্ঘ্যে করুন:

x=[[1,2],[1,2,3],[1]]
length = max(map(len, x))
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)

15
ধন্যবাদ, এই জন্য এখানে এসেছেন। কিছুক্ষণ অলস ব্যবহার করে আসছি এবং এই আচরণটি অ-তুচ্ছ বলে মনে করেছি। এই আরও সাধারণ ক্ষেত্রে ব্যাখ্যা করার জন্য সময় দেওয়ার জন্য ধন্যবাদ।
অ্যাডাম হিউজেস

dtype=floatখুব কাজ করে, এটা রূপান্তর করবে Noneকরার np.nan, উপযোগী হতে পারে।

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

13
এটি স্বয়ংক্রিয়ভাবে 2D অ্যারেতে তালিকার একটি তালিকা রূপান্তর করে কারণ সমস্ত অন্তর্ভুক্ত তালিকার দৈর্ঘ্য একই। আপনি কীভাবে কীভাবে করবেন তা জানেন: সমস্ত তালিকার সমান দৈর্ঘ্য থাকলেও তালিকার একটি অ্যারে তৈরি করুন? অথবা এটা 1D অ্যারের একটি 1D অ্যারের মধ্যে একটি 2 ডি অ্যারের রূপান্তর করা সম্ভব (দক্ষতার আমি বলতে চাচ্ছি, কোন পুনরাবৃত্ত পদ্ধতি বা পাইথন মানচিত্র কাপড়)
Juh_

7
যদি এটি আপনার পক্ষে কাজ করে না কারণ আপনার সাবলিস্টগুলি এমনকি আকারের নয়, নীচের উত্তরটি দেখুন
নিকানা রেকলাভিকস

@ নিকানারেকলাভিক্স উত্তরটি দেখার পরে আমি বিভ্রান্ত হয়ে পড়েছিলাম তবে আপনার মন্তব্যটি সহায়ক ছিল। আমি জানতে পারি যে আমার তালিকাগুলির তালিকাগুলি ঝাঁকুনি ছিল, যখন এটি হওয়ার কথা ছিল না।
নিখিল গিরাজ

38

যেহেতু তালিকার তালিকাগুলিকে নম্পি অ্যারে রূপান্তরিত করার জন্য এটি গুগলের শীর্ষস্থানীয় অনুসন্ধান, প্রশ্নটি 4 বছর বয়সী হওয়া সত্ত্বেও আমি নিম্নলিখিতটি প্রস্তাব করব:

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

যখন আমি প্রথম এইভাবে এটি করার কথা ভেবেছিলাম তখন আমি নিজের সাথে বেশ সন্তুষ্ট হয়েছিল কারণ এটি খুব সহজ। তবে তালিকাগুলির বৃহত তালিকার সাথে সময় নির্ধারণের পরে এটি করা খুব দ্রুততর:

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

নোট করুন যে @ বাসটিয়ানের উত্তর # 1 একটি একট ধারাবাহিক তালিকা তৈরি করে না, তাই আমি যুক্ত করেছি concatenate

যাইহোক ... আমি hstackনম্পির মার্জিত ব্যবহারের জন্য পদ্ধতির পছন্দ করি ।


12
কিছু লোক এটি সন্ধান করতে পারে, আমি নিশ্চিত যে ওপি একটি বহুমাত্রিক এনপায়ার চেয়েছিল pretty
নাথান

1
আমি এটি সন্ধান করছিলাম :))
পল্লি


6

আবার, নেস্টেড তালিকাগুলিকে এন স্তরের সাথে একটি এন-ডাইমেনশনাল অ্যারে রূপান্তর করার সমস্যাটি অনুসন্ধান করার পরে আমি কিছুই পাইনি, সুতরাং এটির চারপাশে আমার পথটি এখানে:

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

মনে রাখবেন যে আপনার যদি ইতিমধ্যে নেস্টেড-তালিকা কাঠামো থাকে তবে আপনার [...[...[...]]]অংশটির প্রয়োজন হবে না don't আপনি শুধু ফোন করতে হবে np.arrayসঙ্গে, ndmin=number-of-list-layers। (যদিও আমার ক্ষেত্রে আমার ndmin=number-of-list-layers-minus-1কোনও কারণে প্রয়োজন ছিল , অন্যথায় একটি অতিরিক্ত স্তর তৈরি হয়েছিল - তদন্তের প্রয়োজন)
ভেনরিক্স

আহ্ ঠিক আছে, আমার ক্ষেত্রে সমস্যাটি হ'ল গভীর "তালিকার স্তর" এর জন্য, তালিকার np.arrayসমস্তগুলির দৈর্ঘ্য একই ছিল না, যার ফলে সেই গভীরতম-তালিকাগুলিগুলিকে নাম্পার অ্যারেগুলিতে রূপান্তরিত না করে কেবল "মোড়ানো" করা হয়েছিল।
ভেন্রিক্স

-2

আমার সমান দৈর্ঘ্যের তালিকার একটি তালিকা ছিল। তারপরেও Ignacio Vazquez-Abramsএর উত্তর আমার পক্ষে কার্যকর হয়নি। আমি একটি 1-ডি নমপি অ্যারে পেয়েছি যার উপাদানগুলির তালিকা। আপনি যদি একই সমস্যার মুখোমুখি হন তবে আপনি নীচের পদ্ধতিটি ব্যবহার করতে পারেন

ব্যবহার numpy.vstack

import numpy as np

np_array = np.empty((0,4), dtype='float')
for i in range(10)
     row_data = ...   # get row_data as list
     np_array = np.vstack((np_array, np.array(row_data)))

পৃথিবীতে কেন আপনি স্ট্যাকিং রাখবেন যদি আপনি জানেন যে আপনার 10 টি তালিকা রয়েছে, তবে কেন এনপি.ইম্পটি ((10, 4)) না কেন এবং কেবল এটি পূরণ করবেন?
মেহেদি

-4

শুধু পান্ডা ব্যবহার করুন

list(pd.DataFrame(listofstuff).melt().values)

এটি কেবল তালিকার তালিকার জন্য কাজ করে

আপনার যদি তালিকার তালিকার একটি তালিকা থাকে তবে আপনি লাইনগুলি বরাবর কিছু চেষ্টা করতে চাইতে পারেন

lists(pd.DataFrame(listofstuff).melt().apply(pd.Series).melt().values)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.