آموزش کار با ماتریس ها در متلب

قسمت بیست و هفتم: آموزش کار با ماتریس ها در متلب

در متلب با یکسری عملیات بر روی ماتریس ها از قبیل ایجاد یک زیر ماتریس، تغییر المان های یک ماتریس و دسترسی به المان ها و سطر وستون های یک …

 

 

دانلود آموزش کار با ماتریس ها در متلب

 

 

 

 

 

کلمات کلیدی:

نمایه سازی ماتریس در MATLAB

نمایه سازی به یک ماتریس ابزار انتخاب یک زیر مجموعه از عناصر از ماتریس است. MATLAB ® دارای چندین سبک نمایه سازی است که نه تنها قدرتمند و انعطاف پذیر است، بلکه قابل خواندن و بیانگر است. نمایه سازی یک کلید برای اثربخشی MATLAB در گرفتن ایده های ماتریس گرا در برنامه های کامپیوتری قابل درک است.

نمایه سازی نیز نزدیک به یک اصطلاح دیگر MATLAB استفاده می شود اغلب می شنویم: vectorization. Vectorization به معنای استفاده از سازه های MATLAB برای از بین بردن حلقه های برنامه است، که معمولا به برنامه هایی که سریعتر اجرا می شوند و بیشتر قابل خواندن هستند. از بسیاری از تکنیک های بردارسازی ممکن است بسیاری از روش های نمایه سازی MATLAB، پنج مورد از آنها در این مقاله توضیح داده شده است.

نمایه سازی بردارها

بیایید با یک مورد ساده یک بردار و یک زیرمجموعه شروع کنیم. بردار این است:

   v = [16 5 9 4 2 11 7 14]؛

زیرنویس می تواند یک مقدار واحد باشد:

   v (3)٪ عنصر سوم را استخراج کنید
   ans =
         9

یا زیرنویس می تواند خودش یک بردار دیگر باشد:

   v ([1 5 6])٪ عناصر اول، پنجم و ششم را استخراج می کند
   ans =
         16 2 11

نماد کولون در MATLAB یک راه آسان برای استخراج طیف وسیعی از عناصر از v را فراهم می کند:

   v (3: 7)٪ سوم را از طریق عناصر هفتم استخراج کنید
   ans =
         9 4 2 11 7

تعویض دو قسمت V را برای ایجاد یک بردار جدید:

   v2 = v ([5: 8 1: 4])٪ استخراج و تقسیم کردن دو طرف v
   v2 =
         2 11 7 14 16 5 9 4

اپراتور end ویژه یک راه کوتاه برای اشاره به عنصر آخر v است:

   v (end)٪ آخرین عنصر را استخراج کنید
   ans =
         14

اپراتور end می تواند در یک محدوده استفاده شود:

   v (5: end)٪ پنجم را از طریق عناصر آخرین استخراج کنید   
   ans =
         2 11 7 14

شما حتی می توانید حساب کاربری را با استفاده از end :

   v (2: end-1)٪ دوم از عناصر بعدی تا آخرین استخراج کنید
   ans =
         5 9 4 2 11 7

ترکیب اپراتور روده بزرگ و end برای دستیابی به اثرات مختلف مانند استخراج هر عنصر k-th و تلنگر کل بردار:

   v (1: 2: end)٪ تمام عناصر عجیب را استخراج کنید
   ans =
       16 9 2 7
   v (پایان: -1: 1)٪ ترتیب عناصر را معکوس می کند
   ans =
       14 7 11 2 4 9 5 16

با استفاده از عبارت نمایه سازی در سمت چپ علامت برابر، می توانید عناصر خاصی از بردار را جایگزین کنید :

   v ([2 3 4]) = [10 15 20]٪ برخی عناصر v را جایگزین کنید
   v =
       16 10 15 20 2 11 7 14

معمولا تعداد عناصر در سمت راست باید همان عناصر علامت نمایه سازی در سمت چپ باشد. با این حال، همیشه می توانید از یک اسکالر در سمت راست استفاده کنید:

   v ([2 3]) = 30٪ عناصر دوم و سوم را با 30 عدد عوض کنید
   v =
       16 30 30 20 2 11 7 14

این فرم تخصیص نمایه شده، گسترش اسکالر نامیده می شود.

ماتریس های نمایه سازی با دو عدد

اکنون نمایه سازی را به یک ماتریس در نظر بگیرید. ما از یک مربع جادویی برای آزمایش های ما استفاده می کنیم:

   A = سحر و جادو (4)
   A =
           16 2 3 13
            5 11 10 8
            9 7 6 12
            4 14 15 1

اغلب، نمایه سازی در ماتریس ها با استفاده از دو شاخص انجام می شود: یکی برای ردیف ها و دیگری برای ستون ها. ساده ترین شکل تنها یک عنصر را انتخاب می کند:

   A (2،4)٪ عنصر را در سطر 2، ستون 4 استخراج کنید
   ans =
            8

به طور کلی، یک یا هر دو زیرساخت سطر و ستون می توانند بردار باشند:

   A (2: 4،1: 2)
   ans =
            5 11
            9 7
            4 14

یک تک : در موقعیت زیر نشانه اختصاری برای 1:end و اغلب برای انتخاب تمام سطرها یا ستونها استفاده می شود:

   A (3، :)٪ ردیف سوم را استخراج کنید
   ans =
      9 7 6 12
   A (:، پایان)٪ استخراج آخرین ستون
   ans =
           13
            8
           12
            1

اغلب سردرگمی در مورد چگونگی انتخاب عناصر پراکنده از یک ماتریس وجود دارد. به عنوان مثال، فرض کنید شما می خواهید عناصر (2،1)، (3،2) و (4،4) عنصر را از A استخراج کنید. بیان A([2 3 4], [1 2 4]) انجام آنچه می خواهید این نمودار نشان می دهد که چگونه نمایه سازی دو زیرین کار می کند:


two_subscript_indexing.gif

استخراج عناصر پراکنده از ماتریس نیاز به یک سبک متفاوت نمایه سازی دارد و ما را به موضوع بعدی ما می آورد.

نمایه سازی خطی

این عبارت A(14) چیست؟

هنگامی که شما به ماتریس A با استفاده از تنها یک زیرنویس فهرست می کنید، MATLAB به صورت زیر عمل می کند به شرط آن که عناصر آن در یک بردار ستون بلند، با پایین آوردن ستون ها به صورت متوالی، مانند:

           16
            5
            9
          ...
            8
           12
            1

عبارت A (14) به عبارتی 14 عنصر درون ستون ضمنی عصاره می کند. نمایه سازی به یک ماتریس با یک زیرنویس تنها در این روش اغلب نامگذاری خطی نامیده می شود.

در اینجا عناصر ماتریس A همراه با شاخص های خطی آنها هستند:


 

matrix_with_linear_indices.gif

شاخص خطی هر عنصر در سمت چپ بالا نشان داده شده است.

از نمودار می توانید ببینید که A(14) همانند A(2,4) .

زیرگروه تک می تواند یک بردار حاوی بیش از یک شاخص خطی باشد، مانند:

   A ([6 12 15])
   ans =
       11 15 12

دوباره مسئله استخراج فقط عناصر (2،1)، (3،2) و (4،4) عدد را دوباره در نظر بگیرید. از عنصر خطی برای استخراج عناصر استفاده می کنید:

   A ([2 7 16])
   ans =
       5 7 1

این برای مثال آسان است، اما چگونه شما به طور کلی شاخص های خطی را محاسبه می کنید؟ MATLAB یک تابع sub2ind می کند که از sub2ind ردیف و ستون به شاخص های خطی تبدیل می شود. شما می توانید از آن برای استخراج عناصر مورد نظر به این روش استفاده کنید:

   idx = sub2ind (اندازه (A)، [2 3 4]، [1 2 4])
   ans =
       2 7 16
   A (idx)
   ans =
       5 7 1

مثالهای پیشرفته استفاده از فهرست بندی خطی

مثال 1: تغییر ردیف یک ماتریس

یک کاربر MATLAB به تازگی این سوال را در comp.soft-sys.matlab newsgroup comp.soft-sys.matlab : اگر می خواهم ردیف ماتریس m-by-n را به مکان k دهم، از A(:,[n-k+1:n 1:nk]) اما اگر k یک تابع از شماره ردیف است چه؟ یعنی، اگر k یک بردار از طول m ؟ آیا راهی سریع و آسان برای انجام این کار وجود دارد؟

پیتر sub2ind این راه حل را با استفاده از sub2ind و indexing خطی نوشته است:

   ٪ vectors برای ردیف ها و ستون ها
   p = 1: m؛
   q = 1: n؛
   ماتریس٪ برای ردیف ها و ستون ها
   [P، Q] = ndgrid (p، q)؛
   ٪ ایجاد یک ماتریس با مقادیر تغییر
   K = repmat (k (:)، [1 n])؛
   ٪ ماتریس را با شاخص های ستون به روز کنید
   Q = 1 + mod (Q + K، n)؛
   ٪ ایجاد ماتریس شاخص های خطی
   ind = sub2ind ([mn]، P، Q)؛
   ٪ در نهایت، ایجاد ماتریس خروجی
   B = A (IND)؛

مثال 2: تنظیم برخی عناصر ماتریسی به صفر

یکی دیگر از کاربر MATLAB این سوال را مطرح کرد: من می خواهم حداکثر هر ردیف را دریافت کنم، که واقعا مشکل نیست، اما بعد از آن می خواهم عناصر دیگر را به صفر برسانم. به عنوان مثال، این ماتریس:

              1 2 3 4
              5 5 6 5
              7 9 8 3

باید تبدیل شود:

              0 0 0 4
              0 6 0
              0 9 0 0

یکی دیگر از خبرنگاران به طور منظم، برت شولسون، این راه حل جمع و جور را ارائه داد.

   [Y، I] = حداکثر (A، []، 2)؛
   B = صفر (اندازه (A))؛
   B (sub2ind (اندازه (A)، 1: طول (I)، I ')) = Y؛

نمایه سازی منطقی

یکی دیگر از تنوع نمایه سازی ، نمایه سازی منطقی ، ثابت شده است که هر دو مفید و بیانگر است. در نمایه سازی منطقی، شما از یک آرایه ی منطقی برای ماتریس استفاده می کنید. MATLAB عناصر ماتریسی را که با مقادیر غیر صفر آرایه منطقی منطبق است، استخراج می کند. خروجی همیشه در قالب یک بردار ستون است. به عنوان مثال، A(A > 12) تمام عناصر A که بیشتر از 12 است استخراج می کند.

   A (A> 12)
   ans =
         16
         14
         15
         13

بسیاری از توابع MATLAB که از آغاز شروع می شوند is آرایه های منطقی بازگشت هستند و برای نمایه سازی منطقی بسیار مفید هستند. برای مثال، شما می توانید تمام عناصر NaN را در یک آرایه با ارزش دیگری با استفاده از ترکیبی از isnan ، نمایه سازی منطقی و گسترش اسکالر جایگزین کنید. برای جایگزینی تمام عناصر NaN از ماتریس B با صفر، استفاده کنید

  B (isanan (B)) = 0

یا شما می توانید همه فضاهای را در یک ماتریس رشته ای با زیر خطوط جایگزین کنید.

  str (isspace (str)) = '_'

نمایه سازی منطقی به طور نزدیک با تابع جستجو ارتباط دارد. بیان A(A > 5) برابر با A(find(A > 5)) . کدام فرم از شما استفاده می کند، عمدتا مربوط به سبک و حس خوانایی کد شماست، اما این بستگی به این دارد که آیا شما نیاز به مقادیر واقعی برای چیز دیگری در محاسبات دارید یا خیر. به عنوان مثال، فرض کنید شما میخواهید مقادیر NaN به طور موقت با صفر جایگزین کنید، برخی از محاسبات را انجام دهید، و سپس مقادیر NaN را در مکانهای اصلی خود قرار دهید. در این مثال، محاسبه فیلترینگ دو بعدی با استفاده از filter2 . شما این کار را مانند این انجام می دهید:

   nan_locations = پیدا کردن (isanan (A))؛
   A (nan_locations) = 0؛
   A = filter2 (ones (3،3)، A)؛
   A (nan_locations) = NaN؛

ما امیدواریم که انواع نمایه سازی MATLAB که در این مقاله نشان داده شده است به شما در مورد روش هایی می پردازد که می توانید الگوریتم های فشرده و کارآمد را بیان کنید. از جمله این تکنیک ها و توابع مربوطه در رپرتوار برنامه نویسی MATLAB، توانایی شما برای ایجاد کد های masterful، readable و vectorized را افزایش می دهد.

 

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

code