এটি পাইথনের লুকানো বৈশিষ্ট্যগুলির মধ্যে প্রকাশিত হয়েছিল তবে আমি ভাল ডকুমেন্টেশন বা উদাহরণগুলি দেখতে পাচ্ছি না যা বৈশিষ্ট্যটি কীভাবে কাজ করে তা ব্যাখ্যা করে।
এটি পাইথনের লুকানো বৈশিষ্ট্যগুলির মধ্যে প্রকাশিত হয়েছিল তবে আমি ভাল ডকুমেন্টেশন বা উদাহরণগুলি দেখতে পাচ্ছি না যা বৈশিষ্ট্যটি কীভাবে কাজ করে তা ব্যাখ্যা করে।
উত্তর:
Ellipsis
, বা ...
কোনও লুকানো বৈশিষ্ট্য নয়, এটি কেবল একটি ধ্রুবক। এটি জাভাস্ক্রিপ্ট ES6 এর থেকে একেবারেই আলাদা যেখানে এটি ভাষার বাক্য গঠনের একটি অংশ। কোনও বিল্টিন ক্লাস বা পাইথন ভাষার কন্ডাক্ট এটি ব্যবহার করে না।
সুতরাং এর সিনট্যাক্সটি সম্পূর্ণরূপে আপনার উপর নির্ভর করে বা অন্য কারও কাছে, এটি বোঝার জন্য লিখিত কোড রয়েছে।
নম্পি এটি ব্যবহার করেন, যেমন ডকুমেন্টেশনে বলা হয়েছে । এখানে কিছু উদাহরণ ।
আপনার নিজের ক্লাসে, আপনি এটি এটি ব্যবহার করতেন:
>>> class TestEllipsis(object):
... def __getitem__(self, item):
... if item is Ellipsis:
... return "Returning all items"
... else:
... return "return %r items" % item
...
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items
অবশ্যই পাইথন ডকুমেন্টেশন এবং ভাষার রেফারেন্স রয়েছে । তবে এগুলি খুব সহায়ক নয়।
উপবৃত্তাকারগুলি উচ্চ মাত্রিক ডেটা স্ট্রাকচার কে টুকরো টুকরো করতে নিমপীতে ব্যবহৃত হয়।
এটি এই বিন্দুটি:
বোঝাতে ডিজাইন করা হয়েছে , বহু মাত্রিক স্লাইসকে সমস্ত মাত্রায় প্রসারিত করতে অনেকগুলি সম্পূর্ণ স্লাইস ( ) সন্নিবেশ করানো হয়েছে ।
উদাহরণ :
>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)
এখন, আপনার কাছে অর্ডার 2x2x2x2 এর একটি 4-মাত্রিক ম্যাট্রিক্স রয়েছে। চতুর্থ মাত্রায় সমস্ত প্রথম উপাদান নির্বাচন করতে, আপনি উপবৃত্ত চিহ্নটি ব্যবহার করতে পারেন
>>> a[..., 0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
যা সমান
>>> a[:,:,:,0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
আপনার নিজস্ব বাস্তবায়নে, আপনি উপরে বর্ণিত চুক্তিটি উপেক্ষা করতে এবং আপনি যা উপযুক্ত মনে করেন এটির জন্য এটি নির্দ্বিধায় মুক্ত।
a[:,:,:,0]
কি কোনও অনুলিপি a[...,0]
ফিরে আসবে এবং "ভিউ" ফিরিয়ে দেবে এবং অনুলিপিটি নয়? আমি id()
উভয় সংস্করণগুলির বিরুদ্ধে এবং একটি 3-ম্লান অ্যারের জন্য চালানোর চেষ্টা করেছি : a[:,:,:, 0], a[:,:,:, 1], a[:,:,:, 2]
প্রত্যেকের আইডির আলাদা আলাদা রয়েছে: a[..., 0], a[..., 1], a[..., 2]
সকলের আইডি একই রকম।
id()
উভয়ের জন্য একই মান প্রদান করে। এছাড়াও চেক করা __array_interface__['data']
একই মেমরি ঠিকানা দেখায়।
a[indexes, ...]
1-ডাইমেনশনাল অ্যারে এমনকি যখন ব্যবহার করতে পারি !
এটি এলিপসিসের আরেকটি ব্যবহার, যার টুকরোগুলির সাথে কোনও সম্পর্ক নেই: আমি প্রায়শই এটি সারির সাথে আন্ত-থ্রেড যোগাযোগে ব্যবহার করি, এটি একটি চিহ্ন হিসাবে "সম্পন্ন" হয়েছে; এটি সেখানে রয়েছে, এটি একটি অবজেক্ট, এটি একটি সিঙ্গলটন, এবং এর নামের অর্থ "অভাব", এবং এটি অতিরিক্ত ব্যবহৃত কিছুই নয় (যা সাধারণ তথ্য প্রবাহের অংশ হিসাবে একটি সারিতে স্থাপন করা যেতে পারে)। YMMV।
অন্যান্য উত্তরে যেমন বলা হয়েছে, এটি টুকরো তৈরিতে ব্যবহার করা যেতে পারে। আপনি যখন অনেকগুলি সম্পূর্ণ স্লাইস নোটেশন ( :
) লিখতে চান না তখন কার্যকর বা যখন আপনি অ্যারে হেরফের হওয়ার মাত্রিকতা কী তা সম্পর্কে নিশ্চিত নন।
আমি হাইলাইট করার জন্য যা গুরুত্বপূর্ণ বলে মনে করেছি এবং এটি অন্যান্য উত্তরগুলিতে অনুপস্থিত ছিল তা হল এটি ব্যবহার করা যেতে পারে যখন আরও কোনও মাত্রা পূরণ করা যায় না।
উদাহরণ:
>>> from numpy import arange
>>> a = arange(4).reshape(2,2)
এর ফলে ত্রুটি হবে:
>>> a[:,0,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
এটি কাজ করবে:
a[...,0,:]
array([0, 1])