در قسمتهای قبلی دوره آموزش متلب فنولوژی، در مورد بردارها در متلب و ماتریسها در متلب آموختیم. در این قسمت دانش خود را وسیعتر میکنیم و به طور کلی در مورد آرایه در متلب میآموزیم. بردارها آرایههای یک بعدی و ماتریسها آرایههای دو بعدی هستند. اما در این قسمت در مورد آرایههای بیش از دو بعد و آرایههای چندبعدی صحبت میکنیم. بحث را با معرفی چند آرایهی معروف و کاربردی در متلب آغاز میکنیم.
آرایههای خاص در متلب
در این قسمت در مورد توابعی کاربردی صحبت میکنیم که آرایههای مخصوصی را تولید میکنند. در همهی این توابع اگر آرگومان ورودی تابع تک عدد باشد، آن آرایه مربعی و اگر آرگومان ورودی دو عدد با کاما باشند، آرایه دو بعدی مستطیلی داریم.
تابع zeros
این تابع یک آرایه با عناصر صفر تولید میکند. به مثال زیر توجه کنید:
1 |
zeros(5) |
نتیجه:
1 2 3 4 5 6 |
ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
تابع ones
آرایهای با عناصر یک تولید میکند:
1 |
ones(4,3) |
نتیجه:
1 2 3 4 5 |
ans = 1 1 1 1 1 1 1 1 1 1 1 1 |
تابع eye
یک آرایه از ماتریس همانی ایجاد میکند (که عناصر قطر اصلی یک و بقیه صفر هستند). به مثال زیر دقت کنید:
1 |
eye(4) |
نتیجه:
1 2 3 4 5 |
ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 |
تابع rand
این تابع یک آرایه از اعداد تصادفی با توزیع نرمال یکنواخت در بازهی (۰,۱) ایجاد میکند:
1 |
rand(3, 5) |
نتیجه:
1 2 3 4 |
ans = 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.6324 0.5469 0.1576 0.4854 0.1270 0.0975 0.9575 0.9706 0.8003 |
تابع magic
تابع magic آرایهای مربعی ایجاد میکند که مجموع عناصر سطرها، ستونها و قطرها، عدد ثابتی هستند. این تابع چنین ماتریس مربعی را با گرفتن یک آرگومان ورودی (که باید بزرگتر مساوی ۳ باشد) ایجاد میکند.
مثال: تابع زیر مجموع عناصر سطری، ستونی و قطری آن همگی ۳۴ خواهد بود.
1 |
magic(4) |
نتیجه:
1 2 3 4 5 |
ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 |
آرایههای چند بعدی در متلب
یک آرایه در متلب که دارای بیش از دو بعد باشد را آرایهی چندبعدی مینامیم. آرایههای چندبعدی در متلب را معمولا از گسترش دادن ماتریسهای دو بعدی میسازیم. به مثال زیر توجه کنید. ابتدا یک آرایهی دو بعدی میسازیم:
1 2 3 4 5 6 |
a = [7 9 5; 6 1 9; 4 3 2] a = 7 9 5 6 1 9 4 3 2 |
آرایهی a یک آرایهی ۳ در ۳ و دو بعدی میباشد. میتوانیم به این آرایه یک بعد سوم با مقادیر مشخص مانند زیر اضافه کنیم:
1 |
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9] |
نتیجه را به صورت زیر مشاهده میکنید. که میتوان آن را با صفحهی دو بعدی ans(:,:,1) و ans(:,:,2) شبیه سازی کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
a = ans(:,:,1) = 0 0 0 0 0 0 0 0 0 ans(:,:,2) = 1 2 3 4 5 6 7 8 9 |
آرایهی چندبعدی با توابع خاص
میتوان با استفاده از توابع خاصی (ones ،zeros ،rand) که گفتیم نیز به صورت چند بعدی آرایه در متلب تعریف کرد. به مثال زیر توجه کنید:
1 |
b = rand(4,3,2) |
دستور بالا یک آرایهی ۳ بعدی با ابعاد ۴ در ۳ در ۲ میسازد که به شکل زیر میتوان آن را نمایش داد:
1 2 3 4 5 6 7 8 9 10 11 |
b(:,:,1) = 0.0344 0.7952 0.6463 0.4387 0.1869 0.7094 0.3816 0.4898 0.7547 0.7655 0.4456 0.2760 b(:,:,2) = 0.6797 0.4984 0.2238 0.6551 0.9597 0.7513 0.1626 0.3404 0.2551 0.1190 0.5853 0.5060 |
آرایهی چند بعدی با تابع cat
برای ساخت آرایههای چندبعدی میتوان با استفاده از تابع cat از ترکیب کردن چند آرایه، یک آرایهی چند بعدی با بعدهای مشخص شده ایجاد کرد. به سینتکس زیر دقت کنید:
1 |
B = cat(dim, A1, A2...) |
در تابع بالا B تابع جدید، A1، A2 و … آرایههایی که قرار است ترکیب شوند، و dim بعدی است که قرار است این ترکیب با آن صورت بگیرد. با مثال زیر میتوانید بهتر کاربرد این تابع را درک کنید:
1 2 3 |
a = [9 8 7; 6 5 4; 3 2 1]; b = [1 2 3; 4 5 6; 7 8 9]; c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0]) |
با اجرای تابع، سه آرایهی ۳ در ۳ دو بعدی با هم ترکیب شده و یک آرایهی ۳ در ۳ در ۳ و سه بعدی را ایجاد میکنند.
1 2 3 4 5 6 7 8 9 10 11 12 |
c(:,:,1) = 9 8 7 6 5 4 3 2 1 c(:,:,2) = 1 2 3 4 5 6 7 8 9 c(:,:,3) = 2 3 1 4 7 8 3 9 0 |
توابع مهم برای آرایه در متلب
متلب توابع زیر را برای انجام عملیات گوناگون (مرتب کردن، چرخاندن، تغییر شکل دادن، شیفت دادن و …) روی آرایهها در نظر گرفته است:
تابع | کاربرد |
---|---|
length | طول یک بردار یه بزرگترین بعد یک آرایه |
ndims | تعداد بعدهای یک آرایه |
numel | تعداد عناصر یک آرایه |
size | ابعاد یک آرایه |
iscolumn | بررسی میکند که آیا ورودی از نوع بردار ستونی است یا خیر |
isempty | بررسی میکند که آرایه خالی است یا خیر |
ismatrix | بررسی میکند آیا ورودی ماتریس است یا خیر |
isrow | بررسی میکند آیا ورودی آرایهی سطری است یا خیر |
isscalar | بررسی میکند آیا ورودی عدد اسکالر است یا خیر |
isvector | بررسی میکند آیا ورودی بردار است یا خیر |
blkdiag | ماتریس قطری بلوکی را با آرگومانهای ورودی میسازد. |
circshift | آرایه را به صورت دایرهای شیفت میدهد. |
ctranspose | ترانهادهی مزودج مختلط را محاسبه میکند. |
diag | عناصر قطری ماتریس را بر میگرداند. |
flipdim | آرایه را نسبت به یک بعد خاص قرینه میکند. |
fliplr | ماتریس را از چپ به راست قرینه میکند. |
flipud | ماتریس را از بالا به پایین قرینه میکند. |
ipermute | ابعاد جایگشتهای ماتریس n بعدی را معکوس میکند. |
permute | ابعاد آرایهی n بعدی را مرتب میکند. |
repmat | آرایه را با ابعاد خواسته شده تکرار میکند |
reshape | آرایه را تغییر شکل میدهد (تغییر ابعاد) |
rot90 | ماتریس را ۹۰ درجه میچرخاند |
shiftdim | ابعاد آرایه را شیفت میدهد. |
issorted | بررسی میکند عناصر آرایه به ترتیب باشند. |
sort | عناصر آرایه را مرتب میکند. |
sortrows | سطرها را از کوچک به بزرگ مرتب میکند. |
squeeze | ابعاد یگانه را حذف میکند. |
transpose | ترانهاده آرایه در متلب |
vectorize | عبارت را تبدیل به بردار میکند. |
در ادامه برخی از توابع بالا که پرکاربرد هستند را با مثال بیشتر توضیح میدهیم.
طول، ابعاد و تعداد عناصر در یک آرایه
در مثال زیر به ترتیب طول، ابعاد و تعداد عناصر آرایههای داده شده را مشاهده میکنید:
1 2 3 4 5 6 |
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9]; length(x) y = rand(3, 4, 5, 2); ndims(y) s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab']; numel(s) |
نتایج:
1 2 3 |
ans = 8 ans = 4 ans = 23 |
شیفت دایرهای عناصر آرایه در متلب
به کدهای زیر توجه کنید. در ماتریس b، عناصر a همهی سطرها یک واحد به سمت پایین شیفت پیدا کردهاند و در ماتریس c، عناصر a همگی یک سطر به پایین و یک ستون به چپ شیفت پیدا کردهاند.
1 2 3 |
a = [1 2 3; 4 5 6; 7 8 9] b = circshift(a,1) c = circshift(a,[1 -1]) |
نتایج:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
a = 1 2 3 4 5 6 7 8 9 b = 7 8 9 1 2 3 4 5 6 c = 8 9 7 2 3 1 5 6 4 |
مرتب سازی آرایه در متلب
به مثالهای زیر از کاربرد تابع sort توجه کنید. در حالت اول عناصر بردار v از کوچک به بزرگ مرتب شدهاند. در حالت دوم ماتریس m حول سطرهای خود مرتب شده و در حالت سوم ماتریس m حول ستونهای خود مرتب شده است:
1 2 3 4 5 |
v = [ 23 45 12 9 5 0 19 17] sort(v) m = [2 6 4; 5 3 9; 2 0 1] sort(m, 1) sort(m, 2) |
نتایج:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
v = 23 45 12 9 5 0 19 17 ans = 0 5 9 12 17 19 23 45 m = 2 6 4 5 3 9 2 0 1 ans = 2 0 1 2 3 4 5 6 9 ans = 2 4 6 3 5 9 0 1 2 |
آرایهی سلولی در متلب
آرایههای سلولی، در اصل آرایههایی از سلولهای ایندکس گذاری شده هستند که هر سلول میتواند یک آرایه از ابعاد و دیتا تایپ متفاوت در خود ذخیره کند. تابع cell برای ساخت آرایهی سلولی مورد استفاده قرار میگیرد. به سینتکس زیر توجه کنید:
1 2 3 |
C = cell(dim) C = cell(dim1,...,dimN) D = cell(obj) |
در سینتکس بالا، C آرایهی سلولی ما و dim یک عدد صحیح یا برداری از اعداد صحیح است که ابعاد آرایهی سلولی را تعیین میکنند. obj نیز یک آرایه از نوع جاوا (یا شیئ) و یا از نوع NET. (System.String یا System.Object) میباشد.
مثال: به آرایهی سلولی ۲ در ۵ زیر دقت کنید:
1 2 |
c = cell(2, 5); c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5} |
با اجرای کد بالا به نتایج زیر خواهید رسید:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
c = { [1,1] = Red [2,1] = 1 [1,2] = Blue [2,2] = 2 [1,3] = Green [2,3] = 3 [1,4] = Yellow [2,4] = 4 [1,5] = White [2,5] = 5 } |
ارجاع به دادههای آرایه سلولی
دو راه برای ارجاع به المانهای آرایههای سلولی در متلب وجود دارد:
- استفاده از پرانتز برای ارجاع به مجموعهای از سلولها
- استفاده از آکولاد برای ارجاع به دادههای داخل یک سلول مشخص
مثال از حالت اول: اشاره به مجموعه سلولهای سطر ۱ و ۲ و ستون ۱ و ۲.
1 2 |
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; c(1:2,1:2) |
1 2 3 4 5 6 7 |
ans = { [1,1] = Red [2,1] = 1 [1,2] = Blue [2,2] = 2 } |
1 2 |
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; c{1, 2:4} |
1 2 3 |
ans = Blue ans = Green ans = Yellow |