cell array و structure در متلب(جلسه سی و هفتم)

ویرایش cell array و structure در متلب
ویرایش cell array و structure در متلب

در این دوره آنلاین آموزش متلب به صورت رایگان با سری آموزش‌های نرم افزار متلب در خدمت شما هستیم. در واقع آنچه که شما به طور کاملا عملی برای استفاده در انجام پروژه متلب نیاز دارید در این جلسات ارائه خواهد شد.

در جلسه گذشته از آموزش مقدماتی متلب با بخش دوم مفهوم دیتا تایپ در متلب آشنا شدیم. در این جلسه قصد داریم با دستور cell array و structure در متلب آشنا شویم.

دستور cell array و structure در متلب

در حال حاضر می‌خواهیم درباره cell array و structure در متلب صحبت کنیم که از اهمیت زیادی برخوردارند.

در اینجا به‌جای اینکه بیاییم کارهای اضافه و بیهوده را انجام دهیم، باید از cell array استفاده کنیم. cell array هم به این صورت است که از دو تا کروشه استفاده می‌کند. با دو تا کروشه تمام این مشکلات را می‌توان حل کرد و می‌توانیم داده‌هایی که طول یکسانی ندارند را با هم جمع کنیم یعنی با هم الحاق کنیم.

الان در اینجا می‌بینیم که یک cell array مانند C را تعریف می‌کنیم؛ Saeid داشتیم، و بعد از آن یک علامت «,» قرار می‌دهیم و نام دوم Amirhossein  را داشتیم و نام نفر سوم Mohammad  بود. الان یک cell array داریم. مشاهده می‌کنید که یک cell است.

cell array ۳×۱ است یعنی ۱ سطر و سه تا ستون دارد. اگر در تصویر زیر هم مشاهده کنید، icon به صورت {} نمایش داده شده است و با characterها متفاوت است.

دستور cell array و structure در متلب-تصویر 1

اگر وارد آن شویم یک cell array را مشاهده می‌کنید که یک cell را برای ما نمایش داده است.

دستور cell array و structure در متلب-تصویر 2

اکنون برای مثال می‌خواهیم به داده اولمان دست پیدا کنیم، مانند قبل می‌نویسیم C(1) که Saeid  را به ما می‌دهد. یعنی عضو اول C را بدهد. حال C(2)  یعنی عضو دوم C را می‌خواهیم و همین‌طور الی آخر.

اگر توجه کنید cell array همان ماتریس است فقط المان‌های آن هر چیزی می‌تواند باشد؛ می‌تواند عدد باشد، رشته یا کاراکتر باشد، حتی ماتریس باشد و حتی می‌تواند یک cell array دیگر هم باشد. در اینجا شما می‌توانید یک cell array دیگر تعریف کنید که در آن باز هم character و string و چیزهای مختلف داریم.

در تعریف C اگر مشاهده ‌کنید، از علامت «,» استفاده کردیم. شما می‌توانید به جای آن فاصله هم قرار دهید.

پس توجه کنید که وقتی دو تا کروشه ({}) داشته باشیم، جواب ما را به صورت یک سلول درمی‌آورد. اما دو تا براکت ([]) به صورت یک ماتریس درمی‌آورد. معنی این جمله چیست؟ به نظر شما C(10) با C{10} چه تفاوتی دارد؟

در اولی یک آرایه سلولی یعنی محتوای عضو دهم را در قالب سلول به ما می‌دهد.

ولی در دومی دقیقا محتوای عضو دهم را به ما می‌دهد. یعنی دقیقا خودش را می‌دهد.

دستور cell array و structure در متلب-تصویر 3

اگر بخواهیم یک مثال بزنیم، فرض کنید C را داریم. یک cell array است که عضو 88، 74 و 20 و 27 را به ما می‌دهد. فقط توجه داشته باشید که این به صورت یک ماتریس می‌شود.

دستور cell array و structure در متلب-تصویر 4

البته بهتر است آن را به صورت دیگری تعریف کنیم.

برای مثال B را به صورت زیر تعریف می‌کنیم.

مشاهده می‌کنید که به صورت یک ماتریس شده است و دارای دو تا سطر و دو تا ستون است. حال اگر که بگوییم B{3} عضو سوم آن کدام است؟ {[74}] عضو سوم آن است. و ۷۴ را به صورت یک آرایه‌ی سلولی نوشته است. ولی اگر B(3) را بخواهیم، ۷۴ را به صورت عدد به ما نشان می‌دهد. و دیگر درون کروشه و براکت قرار ندارد و اصل عدد را به ما می‌دهد.

دستور cell array و structure در متلب-تصویر 5

در مثالی که اسم‌های Saeid ، Mohammad  وAmirhossein  را تعریف کردیم، هم به همین صورت است. به عنوان مثالی دیگر z را به صورت زیر تعریف می‌کنیم.

یک آرایه‌ی سلولی،Saeid ، Sina و Melika را داریم. در اینجا اگر بگوییم z(3) را به ما بدهد، مشاهده می‌کنید که پوسته‌ی آن دورش است یعنی یک آرایه‌ی سلولی را برای ما درآورده است اما اگر بگوییم z{3} را بدهد، Melika خالی را برای ما بیرون می‌آورد.

دستور cell array و structure در متلب-تصویر 6

حال می‌توان cell arrayهای خیلی پیشرفته هم داشت. گفتیم یک cell array می‌تواند شامل عدد و بردار مثل بردار [4 5] و کاراکتر و ماتریس واحد ۵×۵ یا ۹×۹ یا هر عددی که خواستید و یک مجموعه تهی و عدد منطقی true باشد و یک cell array دیگری هم در این cell array باشد که بسیار پیچیده می‌شود. برای مثال A را به صورت زیر تعریف می‌کنیم که یک cell array بسیار پیچیده است:

دستور cell array و structure در متلب-تصویر 7

اگر آن را در workspace مشاهده کنید، با کلیک بر روی A یک [31]، یک ۲×۱ doubleدارد، یک cell دارد، یک cell خالی دارد، در اینجا یکcell  ۲×۱ دارد که این cell یک سطر و دو ستون دارد. اگر  قسمت workspace وارد آن شوید، مشاهده می‌کنید که تمام سلول‌های آن خود یک cell array دیگر هستند.

دستور cell array و structure در متلب-تصویر 8
دستور cell array و structure در متلب-تصویر 9

در اینجا یک کروشه کم گذاشته بودیم.

در عمل استفاده از این‌ها سخت است. به چه دلیل؟ شاید ما یک آرایه از اشخاصی که در یک شرکت استخدام شدند، داشته باشیم و این‌ها طول یکسانی هم ندارند. می‌خواهیم این‌ها را با هم جمع کنیم. برای مثال در اینجا یک آرایه‌ی سلولی برای اسامی، یکی برای نام خانوادگی، یکی برای مدرک تحصیلی آنها، یکی برای سال ورود به شرکت، یکی برای سن و یکی برای شماره موبایلشان و موارد مختلف دیگر داریم. 

یعنی برای هر چیزی یک آرایه درست می‌کنیم. ما نمی‌توانیم چک کنیم ببینیم هرکس چه مقدار حقوق دریافت می‌کند. زیرا این‌ها مانند هم نیستند. نمی‌توانیم ببینیم چه روزهایی غیبت دارند. این یک ساختار unnamed structure است. یعنی ما باید آن را مدیریت کنیم. مثلاً آرایه‌ی اولین first name را ما تولید می‌کنیم، last name را ما تولید می‌کنیم. دقیقا مانند کار کردن با اکسل است. بنابراین cell arrayها انتهایشان همین است که شما یک اکسل دارید.

در اینجا باید برای اسم‌ها، شماره‌ها و … جدول‌های مختلف بسازید. برای همه این‌ها جدول‌های مختلفی می‌سازیم و آنها را با هم link می‌کنیم تا یک منطق درستی داشته باشیم و همه این‌ها به صورت دستی انجام می‌شود و تقریبا مدیریت سختی دارد. اما یک نوع دیگر از داده‌ها را داریم که آن می‌تواند نوع پیشرفته و طبقه‌بندی مناسب‌تری را ارائه دهد.

در اینجا ما در آرایه‌های بدون نام (unnamed) مثلاً Names را تعریف می‌کردیم که یک آرایه‌ی سلولی بود که به صورت Names = {…} تعریف می‌شد. سپس Lastnames را تعریف می‌کردیم و باز هم می‌توانست یک آرایه‌ی سلولی باشد و خودمان تعریف می‌کردیم. بعد Numbers یا شماره‌ها را تعریف می‌کردیم که می‌توانست یک آرایه‌ی ماتریسی یا عددی باشد.

یک آرایه‌ی ماتریسی تعریف می‌کردیم و همین‌طور الی آخر چند آرایه تعریف می‌کنیم و برای مثال از بین این‌ها نفر دهم را پیدا می‌کنیم. می‌گوییم اطلاعات نفر دهم چیست، Numbers او چیست، lastname و name آن چیست. اما در آرایه‌های با Name برای مثال در همین شرکت ما یک employee یعنی کارمند داریم که می‌گوییم این کارمند ما دارای یک name، دارای یک last name است، دارای یک id است، number دارد، salary و … دارد که خود salary می‌تواند به چند بخش تقسیم شود. مثلاً salaryاش A است، B است، چیست؟ که این یک ساختار درختی است که structure هم به آن گفته می‌شود و برای ذخیره‌سازی اطلاعات بسیار عالی است.

عکس بعد عکس 12

یعنی از آن بالا که گفتیم cell arrayها کار با این بسیار ساده‌تر است. در Names می‌گفتیم نفر دهم به این دلیل که unnamed یا بدون نام بود. ولی برای Employee می‌گوییم Employee۱۰ که می‌دانیم اسم آن، last name آن چیست که کار را بسیار برای ما راحت‌تر می‌کند. بنابراین همان‌طور که در اینجا مشاهده می‌کنید در structureها کار بسیار ساده‌تر است. نفر دهم در اینجا خودش دارای اطلاعات کامل است.

ولی در Names نفر دهم باید در تمام این‌ها بگردد. دانستن cell array ها و structureها بسیار مهم است و در متلب به ما خیلی قدرت می‌دهد و استفاده از مثلاً strucureها برنامه‌ی ما را از لحاظ خوانایی، نوشتن و مدیریت کردن آن بسیار حرفه‌ای‌تر می‌کند. در صورت استفاده نکردن از این‌ها یک برنامه‌نویس ضعیف هستیم و کار خودمان را هم داریم سخت‌تر می‌کنیم.

حال چند مثال بیان می‌کنیم تا این مبحث بیشتر جا بیفتد. فرض کنید یک s داریم که همان Structure ما است.

s.x=21

 dot (.) یعنی داخل و یک x داخل s داریم که برابر ۲۱ است.

مشاهده می‌کنید که ساختار آن structure شد. اگر در اینجا نگاه کنید به این صورت است که نوشته شده struct یعنی structure ۱×۱ است. x آن دارای ۲۱ است with fields یعنی با fieldای که x آن دارای ۲۱ است.

دستور cell array و structure در متلب-تصویر 10

حال فرض می‌کنیم s.y آن برابر با ۲۰۰ است. مشاهده می‌کنیم که y آن هم دارای ۲۰۰ شد.

البته باید S بزرگ تعریف می‌کردیم که y آن دارای عدد ۲۰۰ است.

دستور cell array و structure در متلب-تصویر 11

الان مشاهده می‌کنید که x و y، ۲۱ و ۲۰۰ هستند. در workspace هم آمده است. s کوچک که پاک شده است. S بزرگ که اگر وارد آن شویم، می‌بینیم که یک x و یک y دارد. ساختار structureای است و icon آن هم دیگر فرق دارد.

دستور cell array و structure در متلب-تصویر 12

مثلاً x :21 , y: 200 مختصات آن S می‌تواند باشد. حال اگر بخواهیم برای مثال اعداد زیادی در این  تعریف کنیم، چگونه باید این کار را انجام دهیم؟

ابتدا یک s.x و یک s.y تعریف می‌کنیم و اگر یادتان باشد، یک دستوری داشتیم که تکثیر یا repmat بود. به این صورت می‌نویسیم:

Repmat (S,100,1)

مشاهده می‌کنید که برای ما یک structureای تعریف کرد که ۱×۱۰۰ است و x و y دارد.

البته ابتدا بهتر است این‌ها را در یک متغیری به نام A بریزیم و بعد بسازیم.

الان به این صورت درآمد. مثلاً ما عضو دوم A را می‌خواهیم. مشاهده می‌کنیم که جوابی که نشان می‌دهد خالی است. مانند این می‌ماند که یک فضاهایی را به آن دادیم که اکنون باید آن فضاها را پر می‌کردیم. الان این فضاها را پر نکردیم و خالی است. ولی فعلا فضا را در متلب به آنها اختصاص دادیم. مثلاً نفر بیستم را بخواهیم مشاهده می‌کنیم که خالی است.

حال فرض کنید که برای مثال همین نفر بیست، xاش 3 باشد. حال نفر ۲۰ را می‌بینید که x آن 3 و y آن هنوز خالی است؛ یک فضایی را به آن اختصاص دادیم ولی به x عدد دادیم.

مثال‌های دیگری را هم می‌توانیم بیان کنیم. مثلاً فرض کنید یک  carیا ماشین داریم که در اینجا structe می‌گوییم. یک structure برای آن تعریف می‌کنیم. مثلاً این یک ماشین جدید باشد و سال آن ۲۰۲۰ باشد و رنگ یا color این ماشین blue یا آبی باشد.

الان مشاهده می‌کنید که آن را یک structure تعریف کردیم و برای مثال می‌گوییم car1، colorاش چیست؟ color آن را می‌خواهیم که می‌گوید blue است.

حال می‌خواهیم رنگ آن را تغییر دهیم و نمی‌خواهیم blue باشد و می‌خواهیم beige باشد. چگونه آن را تغییر می‌دهیم؟ به این صورت می‌نویسیم:

Car1.color = ‘beige’

می‌گوییم car1، colorاش دیگر blue نباشد و beige باشد. مشاهده می‌کنید که یک ماشینی را به ما داده است که 2020 است ولی رنگ آن بژ است.

برای مثال می‌خواهیم به car اولمان یک متغیر اضافه کنیم و می‌خواهیم به آن mpg اضافه کنیم. mpg چیست؟ miles-per-gallon یعنی این‌که مثلاً با هر گالن بنزین چند مایل مسیر را می‌رود. مثلاً ما می‌گوییم ۲۰ مایل می‌رود. مشاهده می‌کنید که mpg هم به آن اضافه شده است.

بخش دوم هم در اینجا به پایان می‌رسد و در جلسه بعد بخش سوم را شروع می‌کنیم. در جلسه آینده در رابطه با ساختارهای کنترلی در زبان متلب صحبت خواهیم کرد.

در صورتی که شما پس از خواندن محتوای جلسات قبلی و این بخش که به ساده‌ترین زبان ممکن درباره‌ی برنامه‌ی متلب و محیط کاربری آن توضیح داده باز هم سردرگم هستید. می‌توانید با برون سپاری انجام پروژه متلب خود به کارشناسان حرفه‌ای کارت پروژه می‌باشد. میتوانید از طریق شماره‌ی 09104503300 با پشتیبانان کارت از طریق پیام یا تماس در ارتباط باشید.

برای کسب اطلاعات بیشتر در مورد متلب میتوانید به مقاله آموزش متلب مقدماتی مراجعه کنید.

برای ثبت سفارش لطفا در تلگرام یا واتساپ یا ایتا به شماره 09104503300 پیام دهید.