استراکچر (structure) در متلب
به نام خدا و سلام.
به جلسه شانزدهم از سری جلسات آموزش متلب خوش آمدید. آموزش نرم افزار متلب رایگان از وبسایت متلبپلاس ارائه میشود. در این جلسه به آرایه استراکچر (Structure) در متلب میپردازیم. آرایه استراکچر برای کنارهم قرار دادن دادههای مختلف (عدد، بردار، ماتریس، رشته با ابعاد مختلف) در متلب استفاده میشود. تعریف استراکچر، نحوه ایجاد آرایه استراکچر در متلب، اندیس گذاری و دسترسی به محتوای استراکچر و… از مباحث این جلسه هستند.
با متلب پلاس همراه باشید.
مقدمهای بر آرایه Structure در متلب
در این جلسه از آموزش رایگان متلب مقدماتی، با آرایه ساختار (Structure Array) در متلب آشنا میشویم. آرایه ساختار یا استراکچر برای کنارهم قرار دادن دادههای مختلف (از نظر جنس و ابعاد) در گروههای مشخص استفاده میشود. یک بار دیگر به این تعریف دقت کنید. در استراکچر، گروههایی از دادههای غیر همسان (نامتجانس) را کنار هم قرار میدهیم. در واقع اگر آرایه سلولی را یک قفسه با اجناس مختلف درنظر بگیریم، استراکچرها (Structure) یک فروشگاه از اجناس و قفسههای متفاوت است. برای درک بهتر تعریف استراکچر در متلب، از یک مثال استفاده میکنیم. یک مدرسه را درنظر بگیرید. این مدرسه دارای چندین کلاس مختلف میباشد. حال هر کدام از این کلاسها دارای چندین دانش آموز با شماره ملی، نام و نام خانوادگی، سن، معدل و… میباشد. برای اینکه این دادهها را کنار هم و زیر مجموعه مدرسه، بکار ببریم، از آرایه استراکچر در متلب استفاده میکنیم.
البته این آرایه میتواند بزرگتر نیز باشد. به این صورت که این مدرسه، یک مدرسه از مجموعه مدارس یک منطقه از شهر باشد. هیچگونه محدودیتی در آرایه استراکچر در متلب برای تعداد زیر مجموعه نداریم.
لطفا نرم افزار متلب را باز کنید و تمام مثالهایی که در ادامه میآیند را شما هم بنویسید!
تعریف Structure در متلب
برای ایجاد آرایه استراکچر (structure) در متلب دو روش مستقیم وجود دارد. روش اول استفاده از نقطه (Dot) برای ایجاد Structure و روش دوم استفاده از دستور struct میباشد. روشهای دیگری نیز وجود دارد که مستقیم نیستند و استراکچر را از یک آرایه دیگر میسازند. مثلا یک جدول یا آرایه سلولی یا ماتریس را به استراکچر تبدیل میکنند. فعلا با این روشها کاری نداریم و به سراغ روشهای مستقیم ایجاد ساختار در متلب میرویم.
قبل از شروع معرفی روش تعریف استراکچر (structure) در متلب، یک مجموعه برای تعریف درنظر میگیریم. مثلا یک کلاس مدرسه که دارای 5 دانش آموز است. هر دانش آموز دارای نام، نام خانوادگی، معدل و شماره میباشد. میخواهیم این دادهها را در یک استراکچر تعریف کنیم. پس هر دانش آموز دارای 4 مؤلفهی مشخص است. نام، نام خانوادگی، معدل و شماره. نرم افزار متلب به دسته بندیهای درون یک استراکچر، زمینه یا Field میگوید. پس یک استراکچر دارای چندین فیلد است.
ایجاد Structure در متلب با نقطه .
ایجاد استراکچر (structure) با استفاده از نقطه در متلب بسیار راحت و سریع میباشد. در این روش کافیست نام استراکچر را نوشته، سپس یک نقطه قرار دهید و نام فیلد را بنویسید. مثلا stu.name = ‘a’ رشته متنی a را درون فیلد name در استراکچر stu قرار میدهد. حال دادههایی که درنظر داشتیم را با استفاده از نقطه تعریف میکنیم. فرض کنید دادهها به صورت شکل زیر باشد.
پس در این مثال 4 فیلد (Field) با نامهای Name, L_Name, GPA, St_ID داریم. برای تعریف این دادهها در یک استراکچر (به نام stu) با استفاده از نقطه، به صورت زیر عمل میکنیم. فعلا مشخصات دانش آموز اول را درنظر میگیریم.
stu.Name = 'Ali'
stu =
Name: 'Ali'
همانطور که مشاهده میکنید، نام به اولین دانش آموز اختصاص یافت. حال نام خانوادگی را به این استراکچر (structure) اضافه میکنیم.
stu.L_Name = 'Alavi'
stu =
Name: 'Ali'
L_Name: 'Alavi'
حال مقدار معدل این دانش آموز را به استراکچر اضافه میکنیم.
stu.GPA = 18.54
stu =
Name: 'Ali'
L_Name: 'Alavi'
GPA: 18.5400
در نهایت شماره این دانش آموز را درون استراکچر اضافه میکنیم.
stu.St_ID = 98123
stu =
Name: 'Ali'
L_Name: 'Alavi'
GPA: 18.5400
St_ID: 98123
تا به اینجای کار، یک دانش آموز با تمامی مشخصات را وارد کردهایم. حال نام این استراکچر (structure) را در پنجره فرمان نوشته و Enter میزنیم.
stu
stu =
Name: 'Ali'
L_Name: 'Alavi'
GPA: 18.5400
St_ID: 98123
همه اطلاعات این دانش آموز به ترتیبی که وارد شد، نمایش داده میشود. اگر به فضای کاری (Workspace) نگاهی داشته باشیم، stu را میبینیم. این آرایه به صورت struct یک در یک ذخیره شده است. با کلیک بر روی این آرایه با شکل زیر مواجه میشویم.
برای وارد کردن اطلاعات دانش آموز بعدی، بایستی به ابعاد این structure یک در یک، اضافه شود. پس برای وارد کردن اطلاعات دانش آموز دوم به صورت زیر عمل میکنیم.
stu(2).Name = 'Saba'
stu =
1x2 struct array with fields:
Name
L_Name
GPA
St_ID
به عبارت 1×2 struct array دقت کنید. آرایه استراکچر ما دارای 2 ستون شد. برای افزودن نام خانوادگی، معدل و شماره نیز به همین ترتیب عمل میکنیم.
stu(2).L_Name = 'Razavi';
stu(2).GPA = 19.92;
stu(2).St_ID = 98124;
در این حالت، داریم:
stu
stu =
1x2 struct array with fields:
Name
L_Name
GPA
St_ID
با کلیک بر روی stu در فضای کاری متلب داریم.
مشاهده میشود که اطلاعات دانش آموز اول و دوم بدرستی وارد شدهاست.
برای نمایش هر فیلد (Field) از استراکچر میتوان پس از نام استراکچر (structure) یک نقطه گذاشت و نام آن فیلد را نوشت. در این صورت متلب محتوای درون فیلد (Field) استراکچر را نمایش میدهد. مثلا:
stu.Name
ans =
Ali
ans =
Saba
افزودن اطلاعات دانش آموز سوم، چهارم و پنجم نیز به صورت مشابه انجام میگیرد. در کدهای زیر نحوه افزودن اطلاعات را مشاهده میکنید.
stu(3).Name = 'Ziba';
stu(3).L_Name = 'Nik';
stu(3).GPA = 18.84;
stu(3).St_ID = 98125;
stu(4).Name = 'Sima';
stu(4).L_Name = 'Maleki';
stu(4).GPA = 16.70;
stu(4).St_ID = 98126;
stu(5).Name = 'Sina';
stu(5).L_Name = 'Rezaee';
stu(5).GPA = 17.17;
stu(5).St_ID = 98127;
افزودن اطلاعات دانش آموز سوم، چهارم و پنجم نیز به صورت مشابه انجام میگیرد. در کدهای زیر نحوه افزودن اطلاعات را مشاهده میکنید.
ایجاد Structure در متلب با دستور struct
روش دیگری که برای تعریف Structure در متلب داریم، استفاده از تابع struct است. برای ایجاد استراکچر با این دستور، کافیست نام فیلدها و محتوای آنها را درون پرانتز جلوی struct بنویسیم. مثلا برای افزودن فیلد نام همهی دانش آموزان به استراکچر جدیدی به نام stu_new به صورت زیر عمل میکنیم.
stu_new = struct('Name', {'Ali', 'Saba', 'Ziba', 'Sima', 'Sina'})
stu_new =
1x5 struct array with fields:
Name
با کلیک بر روی stu_new در Workspace مشاهده میکنیم که همه نامها ایجاد شدهاست.
به همین صورت فیلدهای نام خانوادگی، معدل و شماره را نیز به این استراکچر (structure) اضافه میکنیم. توجه داشته باشید که برای افزودن اطلاعات جدید با دستور struct باید اطلاعات قبلی نیز مجددا اضافه شوند.
f1 = 'Name';
value1 = {'Ali', 'Saba', 'Ziba', 'Sima', 'Sina'};
f2 = 'L_Name';
value2 = {'Alavi', 'Razavi', 'Nik', 'Maleki', 'Rezaee'};
f3 = 'GPA';
value3 = {18.54, 19.92, 18.84, 16.70, 17.17};
f4 = 'St_ID';
value4 = {98123, 98124, 98125, 98126, 98127};
stu_new = struct(f1, value1, f2, value2, f3, value3, f4, value4)
stu_new =
1x5 struct array with fields:
Name
L_Name
GPA
St_ID
برای مشاهده جزئیات این استراکچر، بر روی stu_new در Workspace کلیک میکنیم.
دسترسی به دادههای درون Structure در متلب
دسترسی به محتوای درون استراکچر مشابه با آرایههای عددی در متلب است. فقط باید توجه داشته باشیم که در یک استراکچر (structure)، بایستی فیلد (Field) موردنظر هم مشخص شود. مثلا stu.Name تمام Name های این استراکچر را ارائه میکند. اما اگر مورد خاصی از این فیلد (Field) مدنظر ما باشد، شماره آن را بیان میکنیم. مثلا برای مشاهده نام دانش آموز دوم، داریم:
stu(2).Name
ans =
Saba
و یا برای دریافت نمرات معدل این استراکچر میتوانیم از stu.GPA استفاده کنیم. البته برای داشتن یک خروجی با ظاهر زیباتر، از [stu.GPA] استفاده میکنیم.
[stu.GPA]
ans =
18.5400 19.9200 18.8400 16.7000 17.1700
افزودن مقدار به ساختار Structure با اندیس گذاری
در روش ایجاد استراکچر با نقطه Dot، افزودن مقدار به استراکچر را فرا گرفتیم. در این روش کافیست یک اندیس مانند 1، 2 و… جلوی نام استراکچر و قبل از نقطه قرار دهیم.
تغییر مقدار استراکچر در متلب
با استفاده از اندیس گذاری استراکچرها در متلب، تغییر مقدار آنها کار بسیار راحتی است. کافیست اندیس دهی را روی مقداری که نیاز به تغییر دارد گذاشته و مساوی با مقدار جدید قرار دهیم. همان مثال کلاس که دارای 5 دانش آموز است را در نظر بگیرید. اگر این استراکچر از حافظه متلب شما پاک شده، با استفاده از کد زیر آن را ایجاد کنید.
stu(1).Name = 'Ali';
stu(1).L_Name = 'Alavi';
stu(1).GPA = 18.54;
stu(1).St_ID = 98123;
stu(2).Name = 'Saba';
stu(2).L_Name = 'Razavi';
stu(2).GPA = 19.92;
stu(2).St_ID = 98124;
stu(3).Name = 'Ziba';
stu(3).L_Name = 'Nik';
stu(3).GPA = 18.84;
stu(3).St_ID = 98125;
stu(4).Name = 'Sima';
stu(4).L_Name = 'Maleki';
stu(4).GPA = 16.70;
stu(4).St_ID = 98126;
stu(5).Name = 'Sina';
stu(5).L_Name = 'Rezaee';
stu(5).GPA = 17.17;
stu(5).St_ID = 98127;
میخواهیم دو تغییر در این استراکچر ایجاد کنیم. معدل دانش آموزی چهارم را از 16.70 به 19.70 تغییر دهیم. تغییر دوم نیز، تغییر نام خانوادگی دانش آموز سوم از Nik به Homayoun است. برای تغییر معدل دانش آموز چهارم کافیست به صورت زیر عمل کنیم.
stu(4).GPA = 19.70;
برای تغییر نام خانوادگی دانش آموز سوم نیز به صورت زیر عمل میکنیم.
stu(3).L_Name = 'Homayoun';
حال مجددا محتوای درون این استراکچر را با کلیک روی آن در Workspace مشاهده میکنیم.
به همین ترتیب هرگونه تغییر در محتوای Structure در متلب امکان پذیر است.
الحاق Structure ها در متلب
برای الحاق یا ترکیب کردن دو یا چند آرایه استراکچر در متلب، از براکت استفاده میکنیم. البته این استراکچرها باید دارای نام فیلدهای (Field) یکسان باشند. لزومی به یکسان بودن محتوای درون فیلدها نیست. برای این کار، کافیست استراکچرهایی که قرار است باهم الحاق شوند را درون براکت قرار دهیم. چنانچه بین استراکچرهای درون براکت فاصله یا کاما قرار دهیم، در کنار هم الحاق میشوند. همچنین اگر بین استراکچرهای درون براکت نقطه ویرگول ; قرار دهیم، زیر هم الحاق میشوند.
struct1.a = 'structure 1';
struct1.b = [1,2,3];
struct2.a = 'structure 2';
struct2.b = rand(5);
combined = [struct1, struct2];
حال اگر محتوای استراکچر combined را مشاهده کنید، هر دو استراکچر اولیه باهم ترکیب شدهاند.
حذف فیلد Field از Structure در متلب
برای حذف یک فیلد (Field) از استراکچر در متلب، از دستور rmfield(s,field) استفاده میشود. rmfield مخفف remove field بوده و برای حذف فیلد از استراکچر در متلب بکار میرود. در این دستور، s نام استراکچر (structure) و field نام فیلد است. برای درک بهتر به مثال زیر دقت کنید. در این مثال یک آرایه استراکچر با 3 فیلد (به نامهای a، b و c) ایجاد میکنیم. سپس فیلد b را حذف میکنیم.
str.a = 1;
str.b = 2;
str.c = 3;
str = rmfield(str,'b')
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) یک آرایه استراکچر (structure) به نام shoes برای مشخصات کفش ایجاد کنید. این استراکچر دارای فیلدهای اندازه (Size)، رنگ (Color) و قیمت (Price) است. درون این استراکچر، مشخصات 2 کفش را وارد کنید. ایجاد استراکچر را با استفاده از نقطه انجام دهید.
- کفش اول: سایز 42، رنگ مشکی (Black) و قیمت 80
- کفش دوم: سایز 37، رنگ خاکستری (Gray) و قیمت 90
تمرین دوم) به آرایه استراکچر تمرین قبل، فیلد (Field) جنس (Material) را اضافه کنید. جنس کفش اول را فوم (Foam) و جنس کفش دوم را چرم (Leather) قرار دهید.
تمرین سوم) استراکچر تمرین اول و دوم را با استفاده از دستور struct انجام دهید.
جمعبندی
جلسه شانزدهم از سری جلسات آموزش متلب به پایان رسید. این جلسه درباره آرایه استراکچر در متلب صحبت کردیم. آرایه استراکچر در متلب، به ما امکان کنارهم قرار دادن هر نوع مختلف از دادهها با هر ابعادی را میدهد. سعی ما انتقال مفاهیم به زبانی ساده و ارائه مثالهای متنوع بود. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
4 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
مبحث سنگینی بود ولی از این که تلاش کردید با زبان ساده بیانش کنید سپاسگزارم 🙏🏻
با سلام و احترام
ممنون از اینکه نظر خودتون رو با ما به اشتراک گذاشتید!
سلام و خسته نباشید… میبخشید انگار چند روزه ویدیو هاتون باز نمیشن اصلا.
سلام و عرض ادب
ویدیوهای آموزش متلب از طریق وبسایت آپارات در متلبپلاس منتشر شده اند. لطفا اتصال کامل به اینترنت کامپیوتر خودتون رو چک کنید. در حال حاضر همه ویدیوها بدرستی پخش میشوند.
موفق باشید.