آرایه سلولی
آرایه سلولی (Cell Arrays) یک ساختار دادهای در متلب است که میتواند انواع مختلف دادهها را در هر عنصر خود ذخیره نماید. برخلاف آرایههای معمولی که همه عناصر آن باید از یک نوع دادهای باشند، آرایه سلولی در متلب این محدودیت را ندارند. آرایههای سلولی در متلب ابزار قدرتمندی برای ذخیره و مدیریت دادههای ناهمگن هستند. با درک عمیق از انواع مختلف آرایههای سلولی، میتوان به بهینهسازی کد و افزایش کارایی در تحلیل دادهها دست یافت. این مقاله توسط کارشناسان انجام پروژه متلب تیم پروژستان نگارش شده است.
آرایههای سلولی در متلب ساختار دادهای انعطافپذیر و قدرتمند هستند که میتوانند انواع مختلف دادهها مانند عددی، رشتهای و ساختارها را در یک مجموعه ذخیره کنند و به کاربران این امکان را میدهند تا دادههای ناهمگن را به راحتی مدیریت کنند. با توجه به قابلیتهای متنوع این ساختار دادهای، استفاده از آرایههای سلولی میتواند بهرهوری کدهای متلب را به طور چشمگیری افزایش دهد.
در متلب، دستوراتی مشابه آرایههای سلولی وجود دارد که هرکدام ویژگیها و کاربردهای خاص خود را دارند. تفاوتهای اصلی بین آرایههای سلولی و سایر ساختارهای دادهای وجود دارد. آرایههای عددی فقط میتوانند دادههای عددی را ذخیره کنند و همه عناصر باید از نوع دادهای یکسان باشند. در مقابل، آرایههای سلولی میتوانند انواع مختلف دادهها را ذخیره کنند. ساختارها (Structures) میتوانند دادههای مختلف را در قالب فیلدهایی نامگذاری شده ذخیره کنند، در حالی که آرایههای سلولی دادهها را بدون نام ذخیره میکنند و برای دادههای ناهمگن مناسبتر هستند. جدولها در متلب برای ذخیره دادههای جدولی با انواع مختلف دادهها استفاده میشوند و به هر ستون نام داده میشود. آرایههای سلولی این قابلیت را ندارند، اما میتوانند دادههای ناهمگن را ذخیره کنند. آرایههای سلولی این امکان را میدهند که عملیات مختلفی را روی دادههای موجود انجام داد.
آرایههای سلولی در متلب به ویژه زمانی مفید هستند که دادههای ناهمگن یا دادههای با اندازههای متفاوت را ذخیره میکنید. به عنوان مثال، در تحلیل دادههای تجربی که شامل اعداد، رشتهها، و ماتریسهای مختلف است، آرایههای سلولی بسیار مفید هستند. آرایههای سلولی میتوانند به انواع مختلفی تقسیم شوند. آرایههای سلولی تکبعدی شامل یک ردیف از سلولها هستند. این نوع آرایهها برای ذخیره مجموعهای از دادههای مشابه یا ناهمگن در یک بُعد استفاده میشوند. برای آشنایی بیشتر با سایر دستورات متلب به دسته بندی آموزش متلب مراجعه کنید.
ایجاد آرایههای سلولی در متلب به چند روش امکانپذیر است:
- استفاده از براکتهای منحنی {}- این براکتها اجازه میدهند تا انواع مختلف دادهها را در یک ساختار ذخیره کرد.
- استفاده از دستورcell برای ایجاد آرایه سلولی خالی
همچنین برای دسترسی به عناصر یک آرایه سلولی از براکتهای منحنی یا {} استفاده میشود و برای تغییر اندازه یا مقدار یک آرایه سلولی، از پرانتزها یا () استفاده میشود.
چندین تابع مفید برای کار با آرایههای سلولی وجود دارد:
|
کاربرد |
دستور |
|
اعمال یک تابع به هر عنصر آرایه سلولی |
cellfun |
|
نمایش محتویات یک آرایه سلولی |
celldisp |
|
تبدیل آرایه سلولی به ماتریس (در صورتی که امکانپذیر باشد) |
cell2mat |
مثال1- ایجاد یک آرایه سلولی ساده
clc; clear; close all
A = {1, ‘Hello’, [5, 3; 8, 2]; rand(2), ‘World’, pi};
disp(A)
خروجی:
[ 1] ‘Hello ‘ [2×2 double ]
[2×2 double ] ‘World ‘ [ 3.1416 ]
توضیح: آرایه سلولیA دارای دو سطر و سه ستون است که هر عنصر آن میتواند شامل دادهای از نوع مختلف باشد. برای ایجاد یک بعد جدید در یک سلول از نقطه ویرگول یا ؛ استفاده می شود.
مثال 2- روش های ایجاد آرایههای سلولی
clc; clear; close all;
C = {1, ‘A’, 3.14; rand(2), ‘B’, magic(3)};
B = cell(2, 3); % ایجاد یک آرایه سلولی 2*3 خالی
B{1,1} = 10; % اختصاص دادن مقدار به یکی از سلولها
C, B
خروجی:
C =
2×3 cell array
{[ 1]} {‘ A ‘} {[ 3.1400 ]}
{ 2×2 double} {‘B’} { 3×3 double }
B =
2×3 cell array
{[ 10]} { 0×0 double} {0×0 double}
{ 0×0 double} { 0×0 double} {0×0 double}
توضیح: سول C دارای ابعاد 2*3 و سلول B نیز داریا ابعاد 2*3 هستند. عناصر تک بعدی در خروجی قابل مشاهده هستند و برای مشاهده عناصر چند بعدی بایستی از طریق workspace مقادیر آن را مطابق شکل زیر مشاهده نمود.
مثال 3. دسترسی به عناصر آرایه سلولی
clc; clear; close all;
C = {1, ‘A’, 3.14; rand(2), ‘B’, magic(3)};
val = C{1,2}; % دسترسی به عنصر سطر اول و ستون دوم
subC = C(1,:); % دسترسی به سطر اول به صورت یک زیرآرایه سلولی
خروجی:
val = ‘A’
subC = 1×3 cell array
{[1]} {‘A’} {[3.1400]}
مثال 4. ویرایش و تغییر اندازه آرایههای سلولی
clc; clear; close all;
C = {1, ‘A’, 3.14; rand(2), ‘B’, magic(3)};
– تغییر مقدار یک سلول:
C{2,3} = ‘New Value’;
– افزودن سطر یا ستون جدید:
C{3,1} = ‘New Row’;
– حذف یک سطر یا ستون:
C(1,:) = []; % حذف سطر اول
خروجی:
C = 2×3 cell array
{2×2 double} {‘B ‘ } {‘New Value’}
{‘New Row’ } {0×0 double} {0×0 double }
توضیح: در سلول C عنصر{2,3} به ‘New Value’تبدیل شده است و دستور C{3,1} یک ردیف جدید ایجاد کرده و با دستور C(1,:) = [] ردیف اول شامل {1, ‘A’, 3.14} حذف شده است.
مثال 5: کاربرد دستور cellfun، celldisp و cell2mat
clc; clear; close all;
C = {1, ‘A’, 3.14; rand(2), ‘B’, magic(3)};
lengths = cellfun(@length, C)
celldisp(C);
mat = cell2mat(C(2,3))
خروجی:
lengths =
1 1 1
2 1 3
C{1,1} =
1
C{2,1} =
0.9172 0.7572
0.2858 0.7537
C{1,2} =
A
C{2,2} =
B
C{1,3} =
3.1400
C{2,3} =
8 1 6
3 5 7
4 9 2
mat =
8 1 6
3 5 7
4 9 2
توضیح:
دستور cellfun(@length, C) تعداد ابعاد هر عنصر سلول C را نمایش می دهد.
دستور celldisp(C) مقادیر هر یک از عناصر سلول را نمایش مدهد ولی ذخیره نمی کند.
دستور mat = cell2mat(C(2,3))عناصر موجود در عنصر {2,3} را بصورت ماتریسی تبدیل کرده و در ماتریس mat ذخیره می کند.
مثال 6: استفاده از توابع با دستور cellfun
clc; clear; close all;
C = {1:4, [2, 2], rand(3)};
sums = cellfun(@sum, C, ‘UniformOutput’, false);
disp(sums);
خروجی:
[10] [4] [1×3 double]
توضیح: دستور cellfun(@sum,…) مجموع آرایه های هر عنصر را محاسبه می کند و در درون sums ذخیره می نماید.
مثال 7: پردازش یک لیست از فایلها
clc; clear; close all;
files = {‘data1.mat’, ‘data2.mat’, ‘data3.mat’};
loadedData = cell(1, length(files));
for i = 1:length(files)
loadedData{i} = load(files{i});
end
خروجی:
loadedData{1} = data1: [2×2 double]
loadedData{2} = data2: [3×3 double]
loadedData{3} = data3: [3×3 double]
توضیح: در این دستور یک سلول با عنوان files با عناوینی از فایل ها ایجاد می شود و در داخل فایل هر کدام از فایلها با دستور load(files{i}) فراخوانی شده و مقادیر فایلها در داخل سلول files قرار می گیرد.
مثال8- ایجاد سلول ها با ابعاد مختلف
clc; clear; close all;
ایجاد سلول تک بعدی
C1 = {1, 2, 3, ‘text’, [1, 2, 3]}
ایجاد یک سلول دو بعدی
C2 = {1, ‘A’, rand(2); [1, 2], ‘B’, magic(3)}
ایجاد یک سلول سه بعدی
C3 = {C1;C2;[]};
C3{1,1,2} = ‘Third Element’
خروجی:
C1 =
1×5 cell array
{[1]} {[2]} {[3]} {‘text’} {1×3 double}
C2 =
2×3 cell array
{[ 1]} {‘A’} {2×2 double}
{1×2 double} {‘B’} {3×3 double}
1×3×3 cell array
C3(:,:,1) =
{1×5 cell }
{2×3 cell }
{0×0 double}
C3(:,:,2) =
{‘Third Element’}
{0×0 double }
{0×0 double }
توضیح: برای ایجاد یک بعد جدید می توان در یک سلول از نقطه ویرگول یا ؛ استفاده می شود. سلول چند بعدی این نوع آرایههای سلولی شامل چندین ردیف و ستون هستند و میتوانند دادههای پیچیدهتری را نگهداری کنند.
مثال9- مقایسه داده های عددی و سلول
clc; clear; close all;
% آرایه عددی
A = [1, 2, 3; 4, 5, 6];
% آرایه سلولی
C = {1, ‘Text’, [2, 3, 4]};
خروجی:
مثال10- مقایسه داده ساختاری و سلول
clc; clear; close all;
% ساختار
S.name = ‘John’;
S.age = 30;
% آرایه سلولی
C = {‘John’, 30};
خروجی:
مثال11- مقایسه داده های جدولی و سلول
clc; clear; close all;
% جدول
T = table({‘John’; ‘Jane’}, [30; 25], ‘VariableNames’, {‘Name’, ‘Age’});
% آرایه سلولی
C = {‘John’, 30; ‘Jane’, 25};
خروجی:
مثال12- ذخیره دادههای ترکیبی
clc; clear; close all;
% ذخیره مجموعهای از دادههای ترکیبی
Data = {1:5, ‘Sample Text’, struct(‘field1’, 10, ‘field2’, [1, 2, 3])};
celldisp(Data)
خروجی:
Data{1} =
1 2 3 4 5
Data{2} =
Sample Text
Data{3} =
field1: 10
field2: [1 2 3]
مثال 13- عملیات آماری روی دادههای عددی
clc; clear; close all;
% ایجاد آرایه سلولی با دادههای عددی
numericData = {rand(5), rand(3), rand(4, 2)};
% محاسبه میانگین برای هر ماتریس در آرایه سلولی
Means = cellfun(@mean, numericData, ‘UniformOutput’, false);
celldisp(Means)
خروجی:
Means{1} =
0.3213 0.5243 0.4851 0.3291 0.5799
Means{2} =
0.3532 0.6378 0.5674
Means{3} =
0.6512 0.4929


