در این نوشته به معرفی دو دستور where و argwhere از کتابخانه numpy پرداخته خواهد شد. این دو دستور اگر درست و به جا استفاده شوند میتوانند موجب خوانایی کدها شده و سرعت برنامهنویسی ما را نیز افزایش دهند. با مثالها گوناگون نحوه استفاده از این دو تابع توصیف خواهد شد.
بسم الله الرحمن الرحیم
یازیلیملاماقدا، اؤزللیکله ساییلار و کمیّتلرله چالیشمالی اولدوغوموز چاغلاردا، بؤیوک و چوخ بویوتلو سایی دیزیلرییله اوزلشمیشیک. بو اوزلشمهده ایسه بیزه، یازیلیملاییچی اولاراق، تاپشیریلان وظیفهلرین اساس قسمی بؤیوک و چوخ بویوتلو بو سایی دیزیلرینده، فرقلی شرطلرله یاناشی گلن کمیّتلری آییرماق اولموش دور. بیز بو وظیفهنی ایچ ایچه یازیلمیش حلقهلر واسطهسییله گؤرهبیلسهک ده، numpy کیتابخاناسی ایشیمیزی داها راحاتلاتمیش دیر. بو یازیدا where و argwhere تابعلرینی تانییاجاغیق، داهی اونلارین نئجه ایشلنمهسینی اؤگرنهجگیک. آدلاریندان بللی اولدوغو کیمی، بو تابعلر سایی دیزیلرینده شرطلرله یاناشی گلن ساییلاری داهی اولدوقلاری یئرین مشخصهلرینی بیزه قایتاراجاقلار. where تابعی بیر یوخسا اوچ گیریشله چاغیریلابیلر. بو چاغیرماقلارین ایکیسینده ده بیرینجی گیریش ایستهدیگیمیز ساییلاری بلیرتهبیلن شرط اولمالی دیر. بو شرطین نئجه یازیلدیغینی اؤرنکلرده گؤرهجگیک. بو تابع اوچ گیریش ایله چاغیریلسا، ایکینجی گیریش شرطین دوغرولاندیغی ایندئکسلر اوچون و اوچونجو گیریش شرطین یانلیش اولدوغو ایندئکسلر اوچون چیخیشی معین ائدن سایی دیزیلری اولمالی دیرلار. بو ایکی نوع چاغیریلیشین چیخیشلاری فرقلی اولوب، بیرینجی حالتده شرطین دوغرولاندیغی ایندئکسلر قایتاریلاجاقلار، ایکینجینده ایسه شرط اوزرینده یازیلان سایی دیزیسی ایله بویوتداش بیر سایی دیزیسی قایتاریلاجاق دیر. بو سایی دیزیسینده شرطین دوغرولاندیغی ایندئکسلرده ایکینجی گیریشین او ایندئکسلرده اولان مقدارلاری و شرطین دوغرولانمادیغی ایندئکسلرده اوچونجو گیریشین او ایندئکسلرده اولان مقدارلاری یازیلاجاق دیر. argwhere تابعی یالنیز شرطین دوغرولاندیغی ایندئکسلری قایتاراجاق دیر و ائتدیگی ایشی نظرده آلیرساق where تابعیندن داها بسیط دیر. بیرینجی اؤرنکده اوچراقلی اولاراق یارادیلمیش ایکی بویوتلو سایی دیزیسینده یاریمدان بؤیوک اولان ساییلارین ایندئکسلرینی و مقدارلارینی بلیرتهجگیک:
from numpy.random import rand from numpy import where x = rand(10, 10) i = where(x > 0.5) y = x[i] print("x:", x) print("i:", i) print("y:", y)
بو اؤرنکده ایلک rand تابعینی اوچراقلی ساییلاری یاراتماق اوچون و اوندان سونرا where تابعینی چاغیرمیشیق. rand تابعینی ایشلتمکله اوچراقلی اولاراق اوندا اون بیر جدولی x آدی ایله یاراتمیشیق. اوندان سونرا where تابعییله و شرطیمیزی یعنی x > 0.5 یازماقلا، سایی دیزیسینده شرطین دوغرولاندیغی ایندئکسلری تاپمیشیق. بو ایندئکسلری i آدی ایله ساخلامیشیق. i اؤزو ایکی عضولی نئچهلیک (tuple) دیر. عضولرین هر بیریسی سایی دیزیسی اولوب، شرطده صدق ائدن ساییلارین مختصاتلارینی x سایی دیزیسینده گؤرستمکده دیرلر. i-ـی الده ائتدیکدن سونرا x-ـده i ایندئکسلی عضولری آییریب y-ـده ساخلامیشیق. سوندا x-ـی، i-ـی و y-ـی گؤسترمیشیک. ساییلارین اوچراقلی اولماغی اوچون هر بیر اجرادا چیخیشلار فرقلی اولاجاقلار. یازدیغیمیز یازیلیمین چیخیشینا دقّت ائتسهنیز y ان و بوی باخیمیندان و عمومیّتده یاپیسی x-ـه بنزر دییل دیر. بعضا اولور بیز چیخیشی عین قالبده و شرطین دوغرولانمادیغی ایندئکسلرده صفرین یازیلماسینی ایستهییریک. بو وضعیتده آشاغیدا یازیلان کیمی یازیلیمیمیزی یازابیلریک:
from numpy.random import rand from numpy import zeros_like, where x = rand(10, 10) y = where(x > 0.5, x, zeros_like(x)) print("x:", x) print("y:", y)
argwhere تابعی بنزر بیر شکلده ایشلنهبیلر لکن چیخیشی مستقیم باشقا بیر سایی دیزیسی اوچون ایندئکس اولاراق ایشلنهبیلمز:
from numpy.random import rand from numpy import argwhere x = rand(10, 10) i = argwhere(x > 0.5) print("x:", x) print("i:", i)
نهایتده بونو آرتیرمالییام where تابعینی ایشلتمهمیش ده شرطلری سایی دیزیلری اوزرینده یازابیلریک:
from numpy.random import rand x = rand(10, 10) print("x > 0.5:", x[x > 0.5])
x > 0.5 عبارتینین سونوچو x ایله بویوتداش بیر دیزی دیر. بو دیزیده شرطین دوغرولاندیغی ایندئکسلر True باشقالار ایسه False یازیلارلار. بو دیزینی ایندئکس اولاراق x سایی دیزیسینه وئریرکن نتیجه x سایی دیزیسینده معادل اولاراق True اولان مختصاتلارا احتوا ائدن بیر باشقا سایی دیزیسی دیر. داها آرتیق بیلگی اوچون بو لینکلری ایزلهیهبیلرسینیز:
https://numpy.org/doc/stable/reference/generated/numpy.where.html
https://numpy.org/doc/stable/reference/generated/numpy.argwhere.html