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


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.