আমি কীভাবে তালিকার একটি সাধারণ তালিকাটিকে একটি অদ্ভুত অ্যারে রূপান্তর করব? সারিগুলি পৃথক সাবলিস্ট হয় এবং প্রতিটি সারিতে সাব-লিস্টের উপাদান থাকে।
আমি কীভাবে তালিকার একটি সাধারণ তালিকাটিকে একটি অদ্ভুত অ্যারে রূপান্তর করব? সারিগুলি পৃথক সাবলিস্ট হয় এবং প্রতিটি সারিতে সাব-লিস্টের উপাদান থাকে।
উত্তর:
যদি আপনার তালিকাগুলির তালিকায় বিবিধ সংখ্যক উপাদানের তালিকা থাকে তবে 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)
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
যেহেতু তালিকার তালিকাগুলিকে নম্পি অ্যারে রূপান্তরিত করার জন্য এটি গুগলের শীর্ষস্থানীয় অনুসন্ধান, প্রশ্নটি 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নম্পির মার্জিত ব্যবহারের জন্য পদ্ধতির পছন্দ করি ।
আবার, নেস্টেড তালিকাগুলিকে এন স্তরের সাথে একটি এন-ডাইমেনশনাল অ্যারে রূপান্তর করার সমস্যাটি অনুসন্ধান করার পরে আমি কিছুই পাইনি, সুতরাং এটির চারপাশে আমার পথটি এখানে:
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সমস্তগুলির দৈর্ঘ্য একই ছিল না, যার ফলে সেই গভীরতম-তালিকাগুলিগুলিকে নাম্পার অ্যারেগুলিতে রূপান্তরিত না করে কেবল "মোড়ানো" করা হয়েছিল।
আমার সমান দৈর্ঘ্যের তালিকার একটি তালিকা ছিল। তারপরেও 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)))