![]() |
C++ &Visual C++ & Matlab
|
![]() |
| آشنایی با زبانهای برنامه نویسی سی پلاس پلاس ویژوال سی و مطلب به همراه دانلود کد ها |
|
: 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)
|
|
+ نوشته شده در
جمعه 4 خرداد1386ساعت 11:34 قبل از ظهر توسط عباس سلیمی |
|
|
صفحه نخست پست الکترونیک آرشیو |
| نوشته های پیشین |
|
دی 1387 آذر 1387 آبان 1387 مهر 1387 شهریور 1387 اردیبهشت 1387 بهمن 1386 دی 1386 آذر 1386 آبان 1386 مهر 1386 شهریور 1386 مرداد 1386 تیر 1386 خرداد 1386 اردیبهشت 1386 |