পাইপথন তালিকা কাঠামোতে নুমপি অ্যারে রূপান্তর করা হচ্ছে?


297

আমি কীভাবে একটি নুমপি অ্যারেটিকে পাইথন তালিকায় রূপান্তর করব (উদাহরণস্বরূপ [[1,2,3],[4,5,6]]), এবং এটি যুক্তিসঙ্গতভাবে দ্রুত করব?

উত্তর:


425

ব্যবহার tolist():

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

নোট করুন যে এটি যে কোনও নাম্বার টাইপ (যেমন এনপি.ইন্ট 32 বা এনপি.ফ্লোয়াট 32) থেকে "নিকটতম সামঞ্জস্যপূর্ণ পাইথন টাইপ" (একটি তালিকায়) রূপান্তর করে। আপনি যদি নাম্বার ডেটা প্রকারগুলি সংরক্ষণ করতে চান, আপনি তার পরিবর্তে আপনার অ্যারেতে তালিকাটি () কল করতে পারেন এবং আপনি স্তন্যপায়ী স্কেলারগুলির একটি তালিকা দিয়ে শেষ করতে পারেন । (মিস্টার_আর_আমস_ডিকে ধন্যবাদ একটি মন্তব্যে এটি উল্লেখ করার জন্য।)


6
আপনার তালিকাটি যদি ফ্লোট 32 হয় tolistতবে এটি এটিকে রূপান্তর করবে floats- এটি সম্ভবত পছন্দসই নয়। ব্যবহারের list(myarray)ফলে এটি ভোগে না - কেন আমাদের পছন্দ করা উচিত tolist?
মিঃ_আর_ম্রি_ডিজ

1
@ মিঃ_আর_আমস_ডি আপনি কি পরামর্শ দিচ্ছেন যে আপনার অ্যারেতে ভাসমান সত্ত্বেও, আপনি কি ফলাফলের তালিকাটি পূর্ণসংখ্যা হতে চান? এটি সম্পূর্ণ ভিন্ন প্রশ্নের ধরণের ... এবং অবশ্যই আপনাকে নির্দিষ্ট করতে হবে যে ফ্লোট 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
ঠিক আছে, সুতরাং একজন [ফ্লোট] এ রূপান্তরিত করে এবং অন্যটি [np.float32] হিসাবে নাম্বার স্কেলার ফ্লোট 32 টাইপটি এখনও ব্যবহার করে। ফাইন। জেনে রাখা ভাল, তবে আমি অনুমান করি যে এটি প্রয়োজনীয় বা না প্রতিটি নির্দিষ্ট ক্ষেত্রে নির্ভর করে। এটির মূল্যের জন্য, আমি সন্দেহ করি যে সাধারণত যখন কেউ (ওপি এর মতো) কোনও তালিকায় রূপান্তর চেয়ে থাকে, তখন তারা স্পষ্টভাবে বোঝায় নিয়মিত পাইথন ডেটা ধরণের একটি তালিকা, এক্ষেত্রে হয় ভাসমান বা পূর্ণসংখ্যার, এবং অদ্ভুত স্কেলারের ধরণের তালিকা নয় num । এটি নির্দেশ করার জন্য ধন্যবাদ: আমি সে সম্পর্কে একটি নোট অন্তর্ভুক্ত করার জন্য উত্তরটি সম্পাদনা করেছি।
পিটার হ্যানসেন

সেই লাইনের সাথে: np.array([[0, 'one'], ['two', 3]]).tolist() -> [['0', 'one'], ['two', '3']]
কিথপজল্লি

11

নাম্বার .tolist পদ্ধতিতে নেস্টি অ্যারে শেপ 2D হলে নেস্টেড তালিকা তৈরি করে।

যদি ফ্ল্যাট তালিকাগুলি পছন্দসই হয় তবে নীচের পদ্ধতিটি কাজ করে।

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))


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