কিভাবে একটি অক্ষ বরাবর একটি নমপি অ্যারে সর্বাধিক উপাদান সূচক পেতে


118

আমার কাছে একটি 2 টি মাত্রিক NumPy অ্যারে রয়েছে। আমি জানি কীভাবে অক্ষের উপরে সর্বোচ্চ মান পাওয়া যায়:

>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])

আমি কীভাবে সর্বোচ্চ উপাদানগুলির সূচকগুলি পেতে পারি? সুতরাং আমি আউটপুট হিসাবে চাইarray([1,1,0])

উত্তর:


142
>>> a.argmax(axis=0)

array([1, 1, 0])

1
এটি পূর্ণসংখ্যার জন্য ভাল কাজ করে তবে ভাসমান মান এবং 0 এবং 1 এর মধ্যে সংখ্যাগুলির জন্য আমি কী করতে পারি
— প্রিয়ম সাহা

100
>>> import numpy as np
>>> a = np.array([[1,2,3],[4,3,1]])
>>> i,j = np.unravel_index(a.argmax(), a.shape)
>>> a[i,j]
4

11
লক্ষ্য করুন যে এই উত্তরটি বিভ্রান্তিকর। এটি সমস্ত অক্ষ জুড়ে অ্যারের সর্বাধিক উপাদানের সূচক গণনা করে, প্রদত্ত অক্ষ বরাবর নয় যেমন ওপি জিজ্ঞাসা করে: এটি ভুল। তদুপরি, যদি একাধিকের বেশি থাকে তবে এটি কেবল প্রথম সর্বোচ্চের সূচকগুলি পুনরুদ্ধার করে: এটি নির্দেশ করা উচিত। a = np.array([[1,4,3],[4,3,1]])এটি ফিরে আসে তা দেখার চেষ্টা করুন i,j==0,1এবং সমাধানটি এটিকে উপেক্ষা করে i,j==1,0। পরিবর্তে সমস্ত ম্যাক্সিমার ব্যবহারের সূচকগুলির জন্য i,j = where(a==a.max()।
— gg349

36

argmax() প্রতিটি সারির জন্য প্রথম উপস্থিতিটিই ফিরিয়ে দেবে। http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html

যদি কোনও আকারযুক্ত অ্যারের জন্য আপনার যদি কখনও এটি করার প্রয়োজন হয় তবে এটি এর থেকে আরও ভাল কাজ করে unravel:

import numpy as np
a = np.array([[1,2,3], [4,3,1]])  # Can be of any shape
indices = np.where(a == a.max())

আপনি নিজের অবস্থার পরিবর্তন করতে পারেন:

indices = np.where(a >= 1.5)

উপরেরগুলি আপনাকে যে ফর্মটি চেয়েছিল তার ফলাফল দেয়। বিকল্পভাবে, আপনি x, y স্থানাঙ্কগুলির দ্বারা একটি তালিকায় রূপান্তর করতে পারেন:

x_y_coords =  zip(indices[0], indices[1])

2
এটি আমার পক্ষে কাজ করে না ... আপনি কি indices = np.where(a==a.max())লাইন 3 এ বোঝাতে চান?
— atomh33ls

আপনি ঠিক, atomh33ls! যে স্পষ্ট জন্য ধন্যবাদ। আমি যথাযথ শর্তসাপেক্ষে দ্বিতীয় সমান চিহ্নটি অন্তর্ভুক্ত করতে এই বিবৃতিটি স্থির করেছি।
— সেবকপ্রিম

@ সেভাকপ্রিম, @ এটমএইচ 33 এল এর .max()পরিবর্তে একটি দ্বিতীয় ত্রুটি দেখিয়েছিল .argmax()। দয়া করে উত্তরটি সম্পাদনা করুন
— gg349

@ gg349, এটি আপনি যা চান তার উপর নির্ভর করে। আরগম্যাক্স এটি একটি অক্ষ বরাবর এটি সরবরাহ করে যা মনে হয় যে ওপি ইউরোইরো দ্বারা উত্তরটি অনুমোদনের উপায় বলেছে।
— সেভাকপ্রিম

আমি দেখতে পাচ্ছি @ atomh33ls এবং আমি সংশোধন করছি অ্যারের বৃহত্তম উপাদান (গুলি) এর সূচকে বাড়ে, যখন ওপি একটি নির্দিষ্ট অক্ষ বরাবর বৃহত্তম উপাদানগুলির বিষয়ে জিজ্ঞাসা করেছিল। তবে x_y_coord = [(0, 2), (1, 1)]খেয়াল করুন যে আপনার বর্তমান সমাধান @ ইউমিওর উত্তরটির সাথে মেলে না এবং এটি ভুল। উদাহরণস্বরূপ, a = array([[7,8,9],[10,11,12]])আপনার কোডটির এই ইনপুটটিতে কোনও হিট নেই তা দেখার চেষ্টা করুন। আপনি আরও উল্লেখ করতে পারেন যে এটি এর চেয়ে আরও ভাল কাজ করে unravelতবে @ ব্লাস পোস্ট করা সমাধানটি সম্পূর্ণ অক্ষরের সমস্যার উত্তর দেয়, এক অক্ষের সাথে জুসুট না।
— gg349

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