سبد خرید (0)

تبلیغات

تغییر دادن ابعاد ماتریس ها در متلب

علاوه بر عملگر ترانهاده، متلب چندین تابع داخلی دیگر نیز دارد که با استفاده از آنها می توان ابعاد ماتریس ها و یا دیگر ویژگی های آنها را تغییر داد. این توابع عبارتند از: reshape و fliplr و flipud و flip و rot90. 

تابع reshape ابعاد یک ماتریس را تغییر می دهد. ماتریس mat که در زیر قرار دارد، یک ماتریس 4×3 است و یا به عبارت دیگر 12 درایه دارد به طوری که هر یک از این درایه ها بین بازه ی 1 تا 100 هستند:

 این دوازده مقدار را می توان به صورت های 6×2 یا 2×6 یا 3×4 یا 12×1 یا 1×12 مرتب نمود. تابع reshape به صورت ستونی مقادیر را مورد استفاده قرار می دهد. بعنوان مثال اگر ماتریس mat را به یک ماتریس 6×2 تبدیل کنیم، ابتدا مقادیر اولین ستون در ماتریس اصلی (14 و 21 و 20) مورد استفاده قرار می گیرند. سپس مقادیر دومین ستون(61 و 28 و 20) مورد استفاده قرار گرفته و همینطور الی آخر. 

 توجه کنید که در این سری از مثال ها، خود ماتریس mat دچار تغییر نمی شود بلکه نتیجه ها در متغیر پیش فرض ans ذخیره می شوند. 

 در متلب، چندین تابع برای جا به جا کردن درایه ها وجود دارد. مثلا تابع fliplr یک ماتریس را از سمت چپ به سمت راست جا به جا می کند. به عبارت دیگر می توان گفت که با استفاده از این تابع، چپ ترین ستون (اولین ستون) به جای آخرین ستون قرار می گیرد و همین طور الی آخر. و تابع flipud نیز یک ماتریس را از بالا به پایین جابه جا می کند. به مثال های زیر توجه کنید:

 تابع flip که در نسخه ی R2013b متلب معرفی شده است،درایه های بردارهای سطری و ستونی و ماتریس ها را جابه جا می کند. (بردارها از چپ به راست و یا بالا به پایین و ماتریس ها بصورت بالا به پایین). به مثال زیر توجه کنید:

 تابع rot90 یک ماتریس را 90 درجه خلاف جهت عقربه های ساعت می چرخاند. بنابراین بعنوان مثال مقادیری که در سمت راست قرار گرفته اند، پس از چرخش در بالا قرار می گیرند. و آخرین ستون برابر می شود با اولین سطر. به مثال زیر توجه کنید:

 

سوال سریع!

آیا تابعی به نام rot180 وجود دارد؟ آیا تابعی به نام rot-90 وجود دارد به طوری که 90 درجه در جهت عقربه های ساعت بچرخاند؟

پاسخ:

دقیقا نه. اما می توان به تابع rot90 یک آرگومان دوم را انتساب داد. این آرگومان باید یک عدد صحیح، مثلا n باشد. پس از تعیین آرگومان دوم، این تابع \(90*n\) درجه، گزینه ی مورد نظر را می چرخاند. عدد n می تواند مثبت یا منفی باشد. 

بعنوان مثال، اگر عدد 2 را بعنوان آرگومان دوم تعیین کنیم، این تابع ماتریس مورد نظر را 180 درجه می چرخاند:

اما اگر یک عدد منفی برای n انتخاب شود، جهت چرخش در جهت عقربه های ساعت خواهد بود:

 

 

 از تابع repmat می توان برای ایجاد یک ماتریس استفاده نمود. دستور \(repmat(mat,m,n)\) یک ماتریس بزرگتر ایجاد می کند به طوری که از m×n کپی از ماتریس mat تشکیل شده است. بعنوان مثال در زیر یک ماتریس 2×2 با مقادیر تصادفی ایجاد کرده ایم:

 حالا اگر این ماتریس را 2×3 بار تکرار کنیم، بصورت زیر در خواهد آمد:

 به مثال زیر توجه کنید:

 از طرف دیگر، تابع repelem با استفاده از ابعاد تعیین شده، هریک از عناصر یک ماتریس را تکرار می کند. این تابع در نسخه ی R2015a متلب معرفی شده است: