آرایه ها در زبان متلب
در زبان برنامه نویسی متلب تمام نوع داده ها آرایه های چند بعدی هستند. نوع داده وکتور یک آرایه تک بعدی و ماتریس هم یک آرایه دو بعدی است. در بخش های قبلی Vector ها و Matrix ها را بررسی کردیم. در این بخش آرایه های چند بعدی را بررسی خواهیم کرد. اما قبل از آن که وارد بحث آرایه های چند بعدی شویم، باید با برخی از نوع داده های ویژه در MATLAB آشنا شویم.
آرایه های ویژه در متلب
در این بخش تعدادی از توابع موجود در متلب که به منظور ایجاد آرایه های ویژه استفاده می شوند را بررسی می کنیم. اگر به این توابع یک آرگومان داده شود، آرایه مربعی ایجاد می شود و اگر دو آرگومان داده شود، آرایه مستطیلی ایجاد می شود.
تابع 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() یک آرایه از اعداد تصادفی در رنج (0, 1) ایجاد می کند. برای مثال:
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() در متلب یک مربع جادویی ایجاد می کند. این تابع یک آرگومان می گیرد که مشخص کننده اندازه مربع است. مقدار این آرگومان باید اسکالر و بزرگتر یا مساوی 3 باشد. مثال:
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 |
اگر به خروجی توجه کنید نتیجه جمع سطر اول می شود 34. همچنین نتیجه جمع ستون اول نیز می شود 34 و نتیجه جمع قطر اصلی نیز برابر با 34 می شود.
آرایه های چند بعدی
در متلب آرایه ای که بیش از یک بعد داشته باشد را آرایه چند بعدی می نامند. به طور کلی به منظور ایجاد یک آرایه چند بعدی، ابتدا یک آرایه دو بعدی ایجاد و سپس گسترش می یابد. از این رو در متلب آرایه چند بعدی را extension (یعنی چیزی که اضافه می شود) آرایه دو بعدی در نظر می گیرند. برای مثال یک آرایه دو بعدی ایجاد می کنیم:
1 | a = [7 9 5; 6 1 9; 4 3 2] |
خروجی:
1 2 3 4 | a = 7 9 5 6 1 9 4 3 2 |
آرایه فوق یک آرایه 3 در 3 است. ما می توانیم به شکل زیر یک بعد سوم نیز به آن اضافه کنیم:
1 | a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9] |
خروجی:
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 |
همچنین می توانیم با استفاده از توابع zeros()، ones() و 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() می توانیم چند آرایه را به هم وصل کرده و آرایه چند بعدی ایجاد کنیم. سینتکس مربوط به این تابع به شکل زیر است:
1 | B = cat(dim, A1, A2...) |
که در آن:
- B: آرایه ای که ایجاد می شود
- dim: بعد آرایه جدید
- A1, A2, …: آرایه هایی که باید به هم وصل شوند
مثال:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
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 | محاسبه مزدوج ماتریس |
flipdim | آرایه را در امتداد بعد مشخص شده می چرخاند |
fliplr | ماتریس را از چپ به راست می چرخاند |
flipud | ماتریس را از بالا به پایین می چرخاند |
reshape | تغییر شکل آرایه |
rot90 | چرخش 90 درجه ای ارایه |
shiftdim | شیفت دادن ابعاد |
issorted | مشخص می کند که آیا عناصر مرتب شده هستند یا خیر |
sort | عناصر آرایه را به صورت صعودی یا نزولی مرتب می کند |
sortrows | سطرها را به صورت صعودی مرتب می کند |
transpose | ترانهاده کردن |
vectorize | وکتور کردن |
مثال ها
مثال های زیر کاربرد برخی از توابع گفته شده در جدول بالا را نشان می دهد.
مثال 1:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 6 | x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9]; length(x) % length of x vector y = rand(3, 4, 5, 2); ndims(y) % no of dimensions in array y s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab']; numel(s) % no of elements in s |
خروجی:
1 2 3 | ans = 8 ans = 4 ans = 23 |
مثال 2:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 | a = [1 2 3; 4 5 6; 7 8 9] % the original array a b = circshift(a,1) % circular shift first dimension values down by 1. c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1 % and second dimension values to the left % by 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 |
مثال 3:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 | v = [ 23 45 12 9 5 0 19 17] % horizontal vector sort(v) % sorting v m = [2 6 4; 5 3 9; 2 0 1] % two dimensional array sort(m, 1) % sorting m along the row sort(m, 2) % sorting m along the column |
خروجی:
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() به منظور ایجاد آرایه سلولی استفاده می شود. سینتکس مربوط به تابع cell():
1 2 3 | C = cell(dim) C = cell(dim1,...,dimN) D = cell(obj) |
مثال:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
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:
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 } |
مثال 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 |
هیچ نظری ثبت نشده است