تاريخ : پنجشنبه هشتم تیر ۱۳۹۱
 

: 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

ارسال توسط بهرامی

اسلایدر

دانلود فیلم