تغییر دادن سایز ماتریس
شاید گمان نمی کردید که تغییر اندازه دادن یک ماتریس امکان پذیر باشد، اما متلب این توانایی را نیز دارا می باشد. متلب می تواند یک ماتریس را بزرگ تر یا کوچکتر کند.
در مثال های این بخش، فرض بر این است که شما ماتریس ak را در بخش "ایجاد یک ماتریس چند بعدی" در این فصل، ایجاد کرده اید. ماتریس ak یک ماتریس 2x3x3 است و ممکن است شما بخوهید یک سطر جدید را به آن اضافه کنید. برای اضافه کردن یک سطر دیگر به ماتریس مورد نظر، عبارت ak(3, :, :) = 0 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:
همان طور که مشاهده می کنید، به هر سه لایه، یک سطر جدید اضافه شد. اما ممکن است شما تصمیم بگیرید که این سطر را حذف کنید. برای حذف کردن این سطر، باید با استفاده از یک ماتریس خالی([]) آن را به null(تهی) ست کنید. برای امتحان کردن این موضوع، عبارت ak(3, :, :) = [] را تایپ کنید و کلید Enter را فشار دهید، نتیجه ی زیر ظاهر خواهد شد:
اکنون ممکن است این سوال برای شما پیش بیاید که چطور می توان یک سطر یا یک ستون را تنها به یک لایه اضافه کرد. برای پاسخ به این سوال، عبارت [ak(:, 4, 1) = [88, 99 را در متلب تایپ کنید و کلید Enter را فشار دهید. خواهید دید که این دستور، چهارمین ستون را تنها در لایه ی 1 ایجاد می کند و آن را با مقادیر 88 و 99 پر می کند. خروجی به صورت زیر خواهد بود:
توجه کنید که دیگر لایه ها نیز دارای چهارمین ستون می شوند، اما به وسیله ی صفرها توسط متلب به طور اتوماتیک پر می شوند.
- نوشته شده توسط احسان عباسی
- بازدید: 23970
دیدگاهها
سلام ببخشید من میخوام رزولوشن یک تصویر رو یکبار دو برابر و یکبار نصف کنم، ممنون میشم راهنمایی کنید
سلام. من یه ماتریس 150*35 دارم و اینو میخوام تبدیلش کنم به 150 تا ماتریس 7*5
یعنی هر ستون ماتریس اولیه من تبدیل بشه به یه ماتریس 7*5
چجوری باید از این شماره ستون استفاده کنم برای شماره گذاری ماتریس تبدیل شده؟؟؟
سلام. برای انجام این کار تابع زیر دو دانلود و استفاده کنید:
beyamooz.com/images/matlab/functions/conv.m
روش کار به صورت زیر است:
>> z = rand(35,150);
>> res = conv(z);
>> res{1}
ans =
Columns 1 through 6
0.7320 0.5413 0.1805 0.6716 0.5677 0.1423
0.1643 0.7881 0.9306 0.9048 0.1883 0.3804
0.2804 0.8696 0.0452 0.5724 0.3242 0.3966
0.2594 0.7875 0.2406 0.1555 0.7160 0.5767
0.5471 0.9694 0.0089 0.5024 0.5529 0.0194
Column 7
0.5776
0.9322
0.1069
0.7321
0.9705
>>
همان طور که مشاهده می کنید، یک ماتریس 35 در 150 به این تابع می دهیم و اون رو در داخل یک آرایه ی سلولی ذخیره می کنه. در داخل هر سلول از این آرایه ی سلولی،یک ماتریس 5 در 7 ذخیره شده است. یعنی در کل ما 150 تا ماتریس 5 در 7 داریم.
یک ماتریس 3×3 دارم میخوام یک سطر و ستون در اول ماتریس بهش اضافه کنم تا 4×4 بشه و در جایی دیگه میخوام در وسط ماتریس سطر و ستون اضافه کنم چه دستوری باید استفاده کنم
برای انجام کارهایی که گفتید، چهار تابع ایجاد کرده ام که می تونید از لینک زیر دانلود کنید:
beyamooz.com/images/matlab/functions/addrow.zip
روش کار به صورت زیر است:
1. اگر می خواهید به اول یک ماتریس، یک سطر اضافه کنید، به صورت زیر عمل کنید:
>> a = magic(3)
a =
8 1 6
3 5 7
4 9 2
>> b = [1,2,3]
b =
1 2 3
>> myRow(a,b)
ans =
1 2 3
8 1 6
3 5 7
4 9 2
>>
2.اگر می خواهید به اول یک ماتریس یک ستون اضافه شود، به صورت زیر عمل کنید:
a = magic(3)
a =
8 1 6
3 5 7
4 9 2
>> b = [1;2;3]
b =
1
2
3
>> myCol(a,b)
ans =
1 8 1 6
2 3 5 7
3 4 9 2
>>
3. اگر می خواهید پس از سطر دوم (یا سطر nام) از یک ماتریس، یک سطر قرار دهید به صورت زیر عمل کنید:
>> a = magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> b = [1,2,3,4]
b =
1 2 3 4
>> rowBetween(a,b,2)
ans =
16 2 3 13
5 11 10 8
1 2 3 4
9 7 6 12
4 14 15 1
>>
4. اگر می خواهید پس از ستون دوم ( یا ستون nام) از یک ماتریس، یک ستون قرار دهید به صورت زیر عمل کنید:
>> a = magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> b = [1;2;3;4]
b =
1
2
3
4
>> colBetween(a,b,2)
ans =
16 2 1 3 13
5 11 2 10 8
9 7 3 6 12
4 14 4 15 1
>>
با سلام میخواستم 30 سطر و 30 ستون اول ماتریسم رو حذف کنم باید چکار کنم؟
سلام. برای انجام این کار تابعی به نام removeMatrix ایجاد کرده ام که می تونید از لینک زیر دانلود کنید:
beyamooz.com/images/matlab/functions/removeMatrix.m
روش انجام کار به صورت زیر است:
ابتدا یک ماتریس به این تابع می دهیم و سپس تعداد سطرهایی که می خواهیم حذف شوند و سپس تعداد ستون هایی که می خواهیم حذف شوند را بعنوان آرگومان به تابع می دهیم:
>> a = magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> removeMatrix(a,3,2)
ans =
19 21 3
25 2 9
با سلام
ممنون از پاسخ شما,ولی وقتی دستور (a = getVec(x100,100 را وارد می کنم در قسمت a برای هر درایه مورد نظر که کلیک می کنم 99 درایه صفر را نشان می دهد در صورتی که در ماتریس های اصلی عدد وجود دارد
نکته:همه 100 ماتریس من قبلا در قسمت workspace آورده شده است
سلام.
بنده چون از نحوه ی ذخیره سازی ماتریس های شما اطلاع نداشتم تابع رو این طوری نوشتم. اما الان که گفتید این 100 ماتریس در workspace تعریف شده اند، میشه با استفاده از یک حلقه ی for کاری کرد که عملیات به طور اتوماتیک انجام شود. اگر امکانش وجود داره، ماتریس های خودتون رو به ایمیل بنده که در زیر نوشتم ارسال کنید تا دقیقا مشکل گزارش شده رو بتونم اصلاح کنم:
[email protected]
همچنین اگر می خواهید به نظرات پاسخ دهید، در ذیر نظر قبلی، بر روی "پاسخ دادن" کلیک کنید تا دیگران بتوانند بحث را دنبال کنند.
سلام
من ١٠٠ ماتريس ٣٠ در ٤٠ دارم كه روي هم قرار دادم
مي خواهم هردرايه ماتريس ها با هم يك ماتريس جديد تشكيل دهند
يعني ١٢٠٠ ماتريس ١٠٠ در ١
چه كار بايد كرد
ممنون
سلام.
برای انجام این کار، یک تابع ایجاد کردم. نام این تابع را getVec قرار داده ام.
با کلیک بر روی لینک زیر می توانید این تابع را دانلود کنید:
beyamooz.com/images/matlab/functions/getVec.zip
روش استفاده از این تابع به صورت زیر است:
1. یک ماتریس دلخواه ( مثلا ماتریس شما که ابعاد آن را ذکر کرده اید) به تابع getVec می دهیم و شماره ی این ماتریس، یعنی عدد 1 برای اولین ماتریس، عدد 2 برای دومین ماتریس و .... الی آخر، را بعنوان آرگومان دوم، به این تابع می دهیم. سپس این تابع طبق خواسته ی شما عمل می کند و اعدادی که در ماتریس ها بر روی یکدیگر قرار گرفته اند را در داخل یک بردار که در داخل یک آرایه ی سلولی قرار دارد به ما می دهد. مثال:
دستورات زیر را در متلب وارد کنید:
x = randi([1 100],3,5)
x2 = randi([1 100],3,5)
a = getVec(x,1)
b = getVec(x2,2)
حالا دستور زیر را وارد کنید:
>> b{1,1}
خواهید دید که جواب زیر برگردانده خواهد شد:
ans =
25 15
به مثال زیر که بنده در متلب وارد کرده ام توجه کنید:
>> x = randi([1 100],3,5)
x2 = randi([1 100],3,5)
a = getVec(x,1)
b = getVec(x2,2)
x =
25 85 36 26 54
58 29 99 82 81
99 69 9 9 74
x2 =
15 48 91 57 69
44 59 65 94 47
36 15 17 79 27
a =
Columns 1 through 10
[25] [85] [36] [26] [54] [58] [29] [99] [82] [81]
Columns 11 through 15
[99] [69] [9] [9] [74]
b =
Columns 1 through 5
[1x2 double] [1x2 double] [1x2 double] [1x2 double] [1x2 double]
Columns 6 through 10
[1x2 double] [1x2 double] [1x2 double] [1x2 double] [1x2 double]
Columns 11 through 15
[1x2 double] [1x2 double] [1x2 double] [1x2 double] [1x2 double]
>> b{1,1}
ans =
25 15
>> x3 = randi([1 100],3,5)
x3 =
57 92 93 63 39
25 89 18 92 75
32 80 52 67 82
>> getVec(x3,3)
ans =
Columns 1 through 5
[1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double]
Columns 6 through 10
[1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double]
Columns 11 through 15
[1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double]
>> ans{1,2}
ans =
85 48 92
سلام .
می خواستم یه ماتریس بزرگ را به یک ماتریس 1×1 یا اینکه یک سطر و ستون داشته باشه تبدیل کنم.چه دستوری باید به مطلب بدم.
سلام. از علامت دونقطه به صورت زیر استفاده کنید:
>> a = [1,2,3,4;5,6,7,8;9,10,11,12]
a =
1 2 3 4
5 6 7 8
9 10 11 12
>> a(:)
ans =
1
5
9
2
6
10
3
7
11
4
8
12
سلام ببخشید من یک سوالی داشتم.اگر یک ارایه ی سلولی وجود داشته باشه که یک ستونش شامل استیرینگ و حرف باشه و یک ستونش به صورت عددی باشه ،برای حذف یک سطر از این ارایه باید چه کار کرد؟به طوری که سایز اون هم کم بشه؟
سلام.
به مثال زیر توجه کنید:
>> myArray = {'hello';'world';'are';'you';'there'};
>> ToRemove = [1:5]
ToRemove =
1 2 3 4 5
>> myArray(ToRemov e) = [];
>>
ابتدا یک آرایه سلولی یک سطری به نام myArray ایجاد کرده ایم. سپس در متغیر ToRemove، اندیس هایی که می خواهیم حذف شوند را مشخص کرده ایم. و در آخر آنها را برابر با [] یا همان null قرار داده ایم.
با سلام من یک ماتریس تک سطر و ده ستونی دارم و میخوام دو ستون بهش اضافه کنم.با مقادیر صفر
سلام.
اگر می خواهید این دو ستون به آخر ماتریس مورد نظر اضافه شود، به صورت زیر عمل کنید:
>> a = [1,2,3,4,5]
a =
1 2 3 4 5
>> a(1,6)=0
a =
1 2 3 4 5 0
>> a(1,7) = 0
a =
1 2 3 4 5 0 0
با سلام
وقت بخیر
برای بدست آوردن 5 سطر اول مینیمم در یک ماتریس دو بعدی چ دستوراتی در متلب داریم؟
سلام.
منظورتون از "5 سطر اول مینیمم" رو بیشتر توضیح بدید. آیا منظور شما پیدا کردن مقدار مینیمم در 5 سطر اول یک ماتریس هست؟