: matlabآرایه های اسپارس در
دارند؟matlab آیا می دانید آرایه اسپارس چیست ؟و چه فایده ای در
آرایه های اسپارس در حقیقت آرایه هایی هستند که باعث کاهش دادن حجم آرایه ها با عدم در نظر گرفتن مقادیر با مقدار صفر بوجود می آیند .
به مثال زیر توجه کنید :
به وجود می آید .حال فرض کنید ماتریس زیر را ایجاد کرده ایم:eye همانطور که در مبحث ماتریس ها گفتیم یک ماتریس همانی با دستور
>> a=eye(10)
a =
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
آرایه matlabهمانطور که می بینیم این ماتریس از 90 عنصر صفر تشکیل شده است و فقط 10 عنصر غیر صفر دارد .در اینجا
های اسپارس را تعریف می کند .ماتریس بالا را به صورت اسپارس تعریف می کنیم :
:sparseدستور
با استفاده از این دستور یک آرایه اسپارس را بوجود می آوریم:
>> b=sparse(a)
b=
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
(6,6) 1
(7,7) 1
(8,8) 1
(9,9) 1
(10,10) 1
همانطور که می بینیم مطلب یک آرایه اسپارس به وجود آورد به این صورت که از از آرایه های صفر صرف نظر کرد .و سطر و ستون و
مقدار آن را ذکر کرد.اما فکر می کنید بیان کردن به این شکل چه فایده و تفاوتی دارد ؟یکی از فواید به این صورت کم کردن مقدارحافظه و این امر را مشاهد می کنیم.whosفضای مورد نیاز است با دستور
>> whos
Name Size Bytes Class
a 10x10 800 double array
ans 10x10 164 double array (sparse)
b 10x10 164 double array (sparse)
Grand total is 120 elements using 1128 bytes
که اسپارس بود 164 بایت حافظه اشغال شد. b که غیر اسپارس بود 800 بایت فضا اشغال شد در صورتی که در آرایه a در آرایه
در زیر به چند تابع اسپارس اشره می کنیم :
:speyeدستور
در بالا:b این دستور آرایه اسپارس همانی ایجاد می کند یعنی یه چیزی مثل ماتریس
>> a=speye(4)
a =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
:fullدستور
این دستور یک ماتریس اسپارس را به فرم غیر اسپارس در می آورد:
>> b=full(a)
b =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
:findدستور
مختصات و مقادیر عناصر غیر صفر ماتریس را پیدا می کند.
>> a=eye(10);
>> find(a)
ans =
1
12
23
34
45
56
67
78
89
100
>> a=speye(4)
a =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
>> find(a)
ans =
1
6
11
16
:nnzدستور
تعداد عناصر غیر صفر ماتریس را می دهد:
>> a=speye(4);
>> nnz(a)
ans =
4
:nonzeros دستور
یک بردار ستونی شامل عناصر غیر صفر می دهد.
>> a=speye(4);
>> a(2,1)=5;
>> b=nonzeros(a)
b =
1
5
1
1
1
:sponesدستور
عناصر غیر صفر ماتریس اسپارس را با یک جایگزین می کند.
>> a=speye(4);
>> a(2,1)=5;
>> a(2,2)=14;
>> a
a =
(1,1) 1
(2,1) 5
(2,2) 14
(3,3) 1
(4,4) 1
>> d=spones(a)
d =
(1,1) 1
(2,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
:spyدستور
شکل پراکندگی ماتریس اسپارس را به صورت یک نمودار به تصویر می کشد.
برلی ماتریس بالا داریم.
spy(d)
برچسبها: آرایه های اسپارس در متلب, matlab
