অবশ্যই, ঠিক আপনারা যেমন সূচক করেন ঠিক তেমন করুন। উদাহরণস্বরূপ 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
। এখন বুঝেছি!