آرایه سلولی در متلب
در جلسه نوزدهم از آموزش رایگان متلب هوسم میخواهیم آرایه سلولی در متلب را معرفی کنیم. آرایه سلولی در متلب میتواند المانهایی با جنس متفاوت را در خود ذخیره کنند. این نوع متغیرها خصوصا برای نگهداری دادههای واقعی بسیار مناسب هستند. زیرا میتوانند المانهایی با جنس مختلف را کنار هم ذخیره کنند.
آرایه سلولی چیست
آرایه سلولی در متلب، یک نوع خاص از آرایهها در متلب است. هر یک از المانهای یک آرایه سلولی، یک سلول است. محتوای سلولها در یک آرایه میتوانند متفاوت باشند. مثلا یکی از سلولها میتواند یک رشته باشد، دیگری عدد و سلول دیگری یک آرایه باشد! چنین متغیری برای نگهداری دادههای واقعی بسیار کارآمد است. چرا که میتوان تمام اطلاعات (با هر شکلی) کنار هم ذخیره کرد.
تعریف آرایه سلولی در متلب
برای تعریف یک آرایه سلولی در متلب، به سادگی میتوان از علامت آکولاد {} استفاده کرد. همانطور که آرایه در متلب تعریف کردیم، به همان شکل میتوانیم با آکولاد آرایه سلولی تعریف کنیم. یک مثال قطعا بهترین روش برای روشن شدن موضوع است.
فرض کنید که دانشآموزی به نام سارا داریم که میخواهیم نام، جنسیت، سن و نمرات 3 درس او را با هم در یک متغیر ذخیره کنیم. این متغیر از چه نوعی باید باشد؟ بله باید یک آرایه سلولی باشد. چرا؟ چون نام و جنسیت از نوع رشته، سن از نوع عددی و نمرات از نوع آرایه هستند. چون جنس المانها با هم فرق دارند، پس باید یک آرایه سلولی تعریف کنیم.
خب، گفتیم برای تعریف یک آرایه سلولی میتوانیم از علامت آکولاد استفاده کنیم. برای این کار کافی است بنویسیم:
students = {'sara', 'female', 12, [17, 18.25, 20]}
با اجرای کد بالا خواهیم داشت:
students = 1×4 cell array {'sara'} {'female'} {[12]} {1×3 double}
مشاهده میکنید که متغیر students که تعریف کردیم، یک آرایه سلولی 4 × 1 است. اولین سلول، رشته ‘sara’، دومین سلول عبارت ‘female’، سومین سلول، عدد 12 و چهارمین سلول یک آرایه 3 × 1 بعدی است. چرا محتویات این سلول نمایش داده نشده است؟ برای سادگی و خوانایی بهتر، آرایهها در سلول به این شکل نشان داده میشوند. اما در بخشهای بعدی خواهیم دید که چگونه میتوان محتویات یک سلول را به شکل کامل نشان داد.
اندیس دهی به آرایه سلولی
برای دسترسی به المانهای داخل یک آرایه سلولی، از اندیس دهی باید کمک گرفت. در جلسات قبل دیدیم که چطور آرایهها را میتوان اندیسدهی کرد. دیدیم که اگر جلوی نام متغیر یک پرانتز باز کرده و اندیسِ المان مورد نظر را بدهیم، متلب به ما محتویات آن المان را خواهد داد. اگر اندیس دهی به آرایه ها را فراموش کردهاید، پیشنهاد میکنم اینجا نگاهی بیندازید!
خب بیایید برای یک آرایه سلولی هم همین کار را بکنیم و ببینیم چه اتفاقی میافتد. از همان مثال بالا استفاده میکنیم و میخواهیم نمرات سارا را از متغیر students استخراج کنیم! پس باید یک پرانتز باز کنیم و اندیس را بدهیم:
students(1, 4)
ans = 1×1 cell array {1×3 double}
مشاهده میکنید که سلولی که در اندیس (4, 1) قرار دارد را قلفتی برایتان بیرون کشیده است. حالا اگر بخواهید نام را از متغیر students بیرون بکشید چه؟ چکار باید بکنید؟ کافی است بنویسید:
>> students(1, 1)
ans = 1×1 cell array {'sara'}
مشاهده میکنید نام را نیز توانستید استخراج کنید. حالا شاید برایتان سوال پیش بیاید که آیا راهی وجود دارد که فقط محتویات هر سلول را استخراج کنیم، نه کل سلول را ؟ البته که وجود دارد! تا الان دیدهاید متلب بگوید که فلان کار از دست من بر نمیآید؟ این امکان نیز وجود دارد. به این منظور کافی است برای اندیس دهی، به جای پرانتز از آکولاد استفاده کنید:
>> students{1, 1}
ans = 'sara'
مشاهده میکنید که فقط محتوای سلول اول برداشته شده است و خروجی دیگر از نوع cell array نیست.
تعریف آرایه سلولی با دستور cell در متلب
با استفاده از دستور cell در متلب میتوان یک آرایه سلولی خالی با ابعاد دلخواه ایجاد کرد. مثلا برای ساختن یک آرایه سلولی خالی به ابعاد 4×2 کافی است بنویسید:
>> my_cell = cell(2, 3)
my_cell = 2×4 cell array {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
مشاهده میکنید که یک آرایه سلولی با ابعاد 4×2 تولید شده است که همه المانهای آن یک دابل به ابعاد 0×0 است! یعنی چه؟ یعنی هیچ، یعنی خالی… خب که چه؟ این آرایه سلولی خالی به چه درد میخورد؟ شما با استفاده از اندیسدهی که در بخش قبل یاد گرفتید، میتوانید این آرایه را پر کنید! سعی کنید اطلاعات سارا را در سطر اول از این آرایه وارد کنید:
>> my_cell{1, 1} = 'sara'; >> my_cell{1, 2} = 'female'; >> my_cell{1, 3} = 12; >> my_cell{1, 3} = [17, 18.25, 20];
حالا ببینیم چه تغییری کرد:
>> my_cell
my_cell = 2×4 cell array {'sara' } {'female' } {1×3 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
مشاهده میکنید که ردیف اول از my_cell از اطلاعات سارا پر شده است. به همین ترتیب میتوانید سلولهای دیگر را نیز پر کنید. پس در این روش ابتدا با استفاده از cell، یک سلول خالی میسازیم. سپس با اندیس دهی این سلول را پر میکنیم.
نمایش آرایه سلولی در متلب
دیدیم که موقع نمایش آرایه سلولی، المانهایی که آرایه هستند، به طور کامل نمایش داده نمیشوند. شاید بخواهید همه المانها را دقیق بدانید. به این منظور میتوانید از دستور celldisp استفاده کنید. مثلا برای نمایش کامل students، کافی است بنویسید:
>> celldisp(students)
students{1} = sara
students{2} = female
students{3} = 12
students{4} = 17.0000 18.2500 20.0000
مشاهده میکنید که همه المانها یکی یکی و به طور کامل نمایش داده شدهاند.
دریافت PDF جلسه آرایه سلولی در متلب
برای دریافت pdf این جلسه، لطفا ایمیل خود را در باکس زیر وارد کرده و روی دکمه «دریافت pdf» کلیک کنید.
جمعبندی آرایه سلولی
در این جلسه از آموزش رایگان متلب، با آرایه سلولی در متلب آشنا شدیم. یاد گرفتیم که چطور یک سلول تعریف کنیم. اندیسدهی به آرایههای سلولی را یاد گرفتیم. نحوه نمایش کامل یک آرایه سلولی را نیز یاد گرفتیم. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد. سوالات و نظرات خود را برایمان کامنت کنید. به کامنتها در اسرع وقت پاسخ داده خواهد شد.
مطالب زیر را حتما مطالعه کنید
تعریف متغیر در متلب
آموزش متلب رایگان
دستور max در متلب
دستور محاسبه انتگرال در متلب
دستور input در متلب
دستور ezplot در متلب
9 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام چطور میشه ماتریسی از توابع ریاضی در مطلب درس کنیم مثلا ماتریسی که در هر عنصر آن یک تابع برحسب x باشد
خیلی مفید وعالی، متشکرم
سام
خیلی توضیحاتتون عالی و کامله
واقعا ممنون و دمتون گرم
با سلام و عرض ادب و تشکر از مطالب مفیدتون
اگر بخواهیم به یکی از اعداد students = {‘sara’, ‘female’, 12, [17, 18.25, 20]} که در چهارمین مکان قرار گرفته اند باید به چه صورت عمل کنیم؟
سلام حامد عزیز،
باید دو بار بهصورت جداگانه اندیس بدید. اندیس اول مربوط به درایه سلول و اندیس دوم مربوط به بردار: students{4}(1)
سلام
خداقوت میگم به نویسنده(نویسندگان) این آموزش بسیار مفید.
چون خودم محتوا تولید کرده ام، می دانم که برای تهیه و تنظیم مطالب هر کدام از این جلسات، چقدر زحمت کشیده شده است.
امیدوارم همیشه پرتوان و با انگیزه و سلامت باشید.
خداوند بزرگ نگهدارتان
سلام
بله، تولید محتوا کار ارزشمند و البته طاقتفرسایی هست.
با آرزوی موفقیت برای شما در تولید محتوا 🌹🙏
سلام
عالی بود ممنون
سلام،
سپاس🙏🌹