একটি অদ্ভুত অ্যারে দেখুন?


90

আমার একটি 2 ডি numpyঅ্যারে আছে। এটির মধ্যে এমন দৃষ্টিভঙ্গি তৈরি করার কোনও উপায় আছে যা প্রথম kসারি এবং সমস্ত কলামগুলি অন্তর্ভুক্ত করবে ?

মূল বিষয়টি হ'ল অন্তর্নিহিত ডেটা অনুলিপি করা এড়ানো (অ্যারেটি এত বড় যে আংশিক অনুলিপিগুলি তৈরি করা সম্ভব নয়))

উত্তর:


229

অবশ্যই, ঠিক আপনারা যেমন সূচক করেন ঠিক তেমন করুন। উদাহরণস্বরূপ y = x[:k, :] এটি আসল অ্যারেতে একটি দৃশ্য ফিরিয়ে দেবে। কোনও ডেটা অনুলিপি করা হবে না, এবং করা কোনও আপডেট yপ্রতিফলিত হবে xএবং বিপরীতে।


সম্পাদনা করুন:

আমি সাধারণত> ইউিনটি 8 এর 10 জিবি 3 ডি অ্যারে নিয়ে কাজ করি, তাই আমি এটি নিয়ে অনেকটাই উদ্বিগ্ন হই ... কিছু জিনিস মাথায় রাখলে নম্পি মেমরি পরিচালনায় খুব দক্ষ হতে পারে। মেমরিতে অ্যারেগুলির অনুলিপিগুলি এড়ানোর বিষয়ে কয়েকটি টিপস এখানে দেওয়া হয়েছে:

ব্যবহারের +=, -=, *=, ইত্যাদি অ্যারের একটি কপি তৈরীর এড়ানো। উদাহরণস্বরূপ x += 10অ্যারেটি জায়গায় পরিবর্তিত করবে, যখন x = x + 10একটি অনুলিপি তৈরি করবে এবং এটিকে সংশোধন করবে। (এছাড়াও, কটাক্ষপাত আছে numexpr )

আপনার সাথে একটি কপি করতে চাই না যদি x = x + 10সচেতন যে হতে x = x + 10.0হবে xস্বয়ংক্রিয়ভাবে করার জন্য একটি ফ্লোটিং পয়েন্ট অ্যারেতে আপ-casted, যদি ইতিমধ্যে ছিল না। যাইহোক, x += 10.0যেখানে xএকটি পূর্ণসংখ্যার অ্যারে রয়েছে তার 10.0পরিবর্তে অ্যারের মতো একই নির্ভুলতার কোনও int-এ ডাউন-কাস্ট করা হবে।

অধিকন্তু, অনেকগুলি ন্যালি ফাংশন একটি outপ্যারামিটার নেয়, তাই আপনি np.abs(x, x)স্থানের নিখুঁত মান নিতে পছন্দ মতো জিনিস করতে পারেন x


একটি দ্বিতীয় সম্পাদন করা হিসাবে, এখানে আরো কয়েকটি টিপস এর মতামত বনাম কপি numpy অ্যারে সঙ্গে

পাইথন তালিকার বিপরীতে, y = x[:]একটি অনুলিপি ফেরত দেয় না, এটি একটি দর্শন দেয়। আপনি যদি একটি অনুলিপি চান (যা অবশ্যই আপনি ব্যবহার করছেন মেমরির দ্বিগুণ)y = x.copy()

আপনি প্রায়শই অদ্ভুত অ্যারেগুলির "অভিনব সূচীকরণ" সম্পর্কে শুনবেন। একটি তালিকা (বা পূর্ণসংখ্যার অ্যারে) সূচক হিসাবে ব্যবহার করা হ'ল "অভিনব সূচক"। এটি খুব দরকারী হতে পারে, তবে তথ্যগুলি অনুলিপি করে।

এর উদাহরণ হিসাবে: y = x[[0, 1, 2], :]একটি অনুলিপি প্রদান করে, যখন y = x[:3,:]একটি দর্শন ফেরত দেয়।

এমনকি সত্যই ক্রেজি ইনডেক্সিং x[4:100:5, :-10:-1, None]"সাধারণ" সূচক এবং এটি একটি দৃশ্যে ফিরে আসবে, তবে বড় অ্যারেগুলিতে সমস্ত ধরণের টুকরো টুকরো ব্যবহার করতে ভয় পাবেন না।

x.astype(<dtype>)নতুন ধরণের হিসাবে ডেটার একটি অনুলিপি ফিরে আসবে, যখন x.view(<dtype>)একটি দর্শন ফিরে আসবে।

তবে এটি অত্যন্ত সতর্কতা অবলম্বন করুন ... এটি অত্যন্ত শক্তিশালী এবং দরকারী, তবে অন্তর্নিহিত ডেটা কীভাবে মেমরিতে সংরক্ষণ করা হয় তা আপনার বুঝতে হবে। আপনার যদি ভাসমানগুলির একটি অ্যারে থাকে এবং সেগুলি কীট হিসাবে দেখেন, (বা বিপরীতে) আড়ম্বরপূর্ণ অ্যারের অন্তর্নিহিত বিটগুলিকে ইনট হিসাবে ব্যাখ্যা করবে ।

উদাহরণস্বরূপ, এর অর্থ হ'ল .৪ বিট হিসাবে 1.0সামান্য এন্ডিয়ান সিস্টেমে ভাসমানটি যখন 64৪ বিবিট ইনট হিসাবে দেখা হবে এবং ইউন্ট ৮ হিসাবে যদি দেখা হয় তবে এর 4607182418800017408অ্যারে [ 0, 0, 0, 0, 0, 0, 240, 63]দেখা যাবে। এটি বড়ই সুন্দর যখন আপনার বড় অ্যারেগুলিতে কিছুটা বিট-টুইডলিং করা দরকার, যদিও ... মেমরি বাফারকে কীভাবে ব্যাখ্যা করা যায় তার উপর আপনার নিম্ন স্তরের নিয়ন্ত্রণ থাকে।


খুব সুন্দর টিপস জন্য ধন্যবাদ! আমি নম্পি ব্যবহারকারী গাইডটি পড়ছিলাম এবং কেন x[np.array([1, 1, 3, 1])] += 1সংশোধিত তা বিভ্রান্ত করছি x। এখন বুঝেছি!
tnq177

সুন্দর টিপস! আমার আরেকটা প্রশ্ন আছে. কীভাবে প্রমাণ করতে যায় যে নম্পী কোনও অনুলিপিটি কেবল একটি দৃশ্যকে ট্রিগার করে না? পাইথনের আইডি () এটি অক্ষম বলে মনে হচ্ছে।
wuhaochi

4
@ উহাওচি যদি এর মত bহয় aতবে b.base is aতা হবে True। একটি অনুলিপি (যে কোনও অ্যারে) সর্বদা থাকবেarr_copy.base is None
জার্গ মের্লিন স্পাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.