Numpy.histogram () কীভাবে কাজ করে?


120

ন্যাপি পড়ার সময়, আমি ফাংশনটির মুখোমুখি হয়েছি numpy.histogram()

এটি কীসের জন্য এবং এটি কীভাবে কাজ করে? দস্তাবেজে তারা বিনয়ের কথা উল্লেখ করেছে : এগুলি কি?

কিছু গুগল আমাকে সাধারণভাবে হিস্টোগ্রামের সংজ্ঞায় নিয়ে যায় । আমি তা পেয়েছি তবে দুর্ভাগ্যক্রমে আমি এই জ্ঞানটিকে ডক্সে প্রদত্ত উদাহরণগুলির সাথে সংযুক্ত করতে পারি না।

উত্তর:


167

একটি বিন এমন একটি পরিসীমা যা এক্স-অক্ষ বরাবর হিস্টোগ্রামের একক বারের প্রস্থকে উপস্থাপন করে। আপনি এটিকে অন্তর্বর্তীও বলতে পারেন। (উইকিপিডিয়া তাদের আরও আনুষ্ঠানিকভাবে "বিভেদ বিভাগ" হিসাবে সংজ্ঞায়িত করে।)

নম্পি histogramফাংশন হিস্টোগ্রামটি আঁকেনি , তবে এটি প্রতিটি বারের মধ্যে আসা ইনপুট ডেটার উপস্থিতিগুলি গণনা করে, যা প্রতিটি বারের ক্ষেত্রফল (বিন্দুগুলি সমান প্রস্থের না হলে উচ্চতাটি প্রয়োজনীয় নয়) নির্ধারণ করে।

এই উদাহরণে:

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

3 টি বিন রয়েছে, যথাক্রমে 0 থেকে 1 (উদাহরণ 1), 1 থেকে 2 (এক্সেল। 2) এবং 2 থেকে 3 (সহ 3) এর মানগুলির জন্য। [0, 1, 2, 3]এই উদাহরণে ডিলিমিটারদের ( ) তালিকা সরবরাহ করে যদি নম্পি এই বিনগুলি সংজ্ঞায়িত করে তবে এটি ফলাফলগুলিতে বিনগুলিও ফেরত দেয়, কারণ কোনওটি নির্দিষ্ট না করা থাকলে এটি ইনপুট থেকে স্বয়ংক্রিয়ভাবে চয়ন করতে পারে। যদি bins=5উদাহরণস্বরূপ, এটি সর্বনিম্ন ইনপুট মান এবং সর্বাধিক ইনপুট মানের মধ্যে সমান প্রস্থের 5 টি বিন ব্যবহার করবে।

ইনপুট মানগুলি 1, 2 এবং 1। সুতরাং, বিন "1 থেকে 2" তে দুটি ঘটনা (দুটি 1মান) থাকে এবং বিন "2 থেকে 3" এর মধ্যে একটি উপস্থিতি (দ্য 2) থাকে। এই ফলাফল পাওয়া tuple প্রথম আইটেমে আছে: array([0, 2, 1])

যেহেতু এখানে বিনগুলি সমান প্রস্থের, তাই আপনি প্রতিটি বারের উচ্চতার জন্য সংখ্যার সংখ্যাটি ব্যবহার করতে পারেন। যখন আঁকা, আপনি হবে:

  • এক্স-অক্ষের উপর পরিসীমা / বিন [0,1] এর জন্য 0 উচ্চতার একটি বার,
  • পরিসীমা / বিনের জন্য উচ্চতা 2 এর একটি বার [1,2],
  • পরিসীমা / বিনের জন্য উচ্চতার 1 বার [2,3]।

আপনি এটি ম্যাটপ্লটলিবের সাথে সরাসরি প্লট করতে পারেন (এটির histফাংশনটি বিন এবং মানগুলিও দেয়):

>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()

এখানে চিত্র বর্ণনা লিখুন


8
আপনি যদি এই প্লটের পরিকল্পনা করতে চান তবে আপনি এই উত্তরে আগ্রহীও হতে পারেন। ম্যাটপ্ল্লিটিব সরাসরি এগুলিও গণনা করতে পারেনএখানে এবং এখানে উদাহরণ দেখুন ।
ব্রুনো

আইরিস ফুলের ডেটাসেট, গণনা, বিন_জেজস = এনপি এইচটোগ্রামে (আইরিস_সেটোসা ['পাপড়ি_ দৈর্ঘ্য'], বিনস = 10, ঘনত্ব = সত্য) আমাকে ভাসমান মানগুলিতে আমার সংখ্যা দেয়, আপনি যে উদাহরণ দিয়েছেন তার অনুসারে কীভাবে গণনা হতে পারে ভাসমান মান?
দীপেন গজ্জর

সেরা উত্তরের বিষয়টি বিবেচনায় নেওয়া উচিত যে সর্বোচ্চ ডান প্রান্তের উপরে উল্লেখযোগ্য সংখ্যক মান উপেক্ষা করা হবে। সর্বদা সর্বশেষ বিনটিতে গ্রেটস প্রান্তের উপরে মান যুক্ত করুন বা binsঅ্যারের সর্বাধিক মানটিতে সর্বশেষে তৈরি করা মানটি পরিবর্তন করুন ।
এ.আমাতভ

@ দিপেনগজ্জার আপনি যদি "ঘনত্ব = সত্য" বাদ দেন তবে আপনি তা দেখতে পাবেন না। ঘনত্বের কীওয়ার্ড আপনাকে একটি "নরমালাইজড" হিস্টগ্রাম দেয় যেখানে সম্ভাব্যতা ঘনত্বের কার্যটি উপস্থাপিত হয়। আপনি এটি সম্পর্কে এখানে পড়তে পারেন ।
বুফ

67
import numpy as np    
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))

নীচে, histইঙ্গিত দেয় যে বিন # 0 তে 0 টি আইটেম, বিন # 1 এ 2, বিন # 3 এ 4, বিন # 4 এ 1 রয়েছে।

print(hist)
# array([0, 2, 4, 1])   

bin_edges ইঙ্গিত দেয় যে বিন # 0 হ'ল অন্তর [0,1), বিন # 1 হ'ল [1,2), ..., বিন # 3 হ'ল [3,4)।

print (bin_edges)
# array([0, 1, 2, 3, 4]))  

উপরের কোডটি খেলুন, ইনপুটটি পরিবর্তন করুন np.histogramএবং দেখুন এটি কীভাবে কাজ করে।


তবে একটি ছবি হাজার শব্দের মূল্য:

import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()   

এখানে চিত্র বর্ণনা লিখুন


4
আমি মনে করি এটি আরও নির্ভুল হবে: plt.bar(bin_edges[:-1], hist, width=1)এবং plt.xlim(min(bin_edges), max(bin_edges)), বারগুলি তাদের প্রত্যাশিত প্রস্থের সাথে ফিট করার জন্য (অন্যথায়, এর মধ্যে কোনও মান না দিয়ে কেবল একটি ছোট বিন থাকতে পারে)।
ব্রুনো

"Plt.hist (...)" ফাংশনে উপরের ন্যম্পিটি ফর্ম্যাটে প্রাপ্ত "হিস্ট" ব্যবহার করা কি সম্ভব? কারণ বার পদ্ধতিতে, আপনি এটি "y" হিসাবে সরবরাহ করেন, যখন এখানে
হিস্টে,

7

এর সাথে আর একটি দরকারী জিনিস numpy.histogramহ'ল লাইনগ্রাফের উপর x এবং y স্থানাঙ্ক হিসাবে আউটপুট প্লট করা। উদাহরণ স্বরূপ:

arr = np.random.randint(1, 51, 500)
y, x = np.histogram(arr, bins=np.arange(51))
fig, ax = plt.subplots()
ax.plot(x[:-1], y)
fig.show()

এখানে চিত্র বর্ণনা লিখুন

এটি হিস্টোগ্রামগুলি ভিজ্যুয়ালাইজ করার একটি কার্যকর উপায় হতে পারে যেখানে আপনি সর্বত্র বার ছাড়াই উচ্চতর স্তরের গ্রানুলারিটি চান। চরম পিক্সেল মান সনাক্তকরণের জন্য চিত্রের হিস্টোগ্রামে খুব দরকারী।


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