به آموزشگاه بیاموز خوش آمدید!

سبد خرید (0)

تغییر دادن سایز ماتریس

شاید گمان نمی کردید که تغییر اندازه دادن یک ماتریس امکان پذیر باشد، اما متلب این توانایی را نیز دارا می باشد. متلب می تواند یک ماتریس را بزرگ تر یا کوچکتر کند. 

در مثال های این بخش، فرض بر این است که شما ماتریس ak را در بخش "ایجاد یک ماتریس چند بعدی" در این فصل، ایجاد کرده اید. ماتریس ak یک ماتریس 2x3x3 است و ممکن است شما بخوهید یک سطر جدید را به آن اضافه کنید. برای اضافه کردن یک سطر دیگر به ماتریس مورد نظر، عبارت ak(3, :, :) = 0 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:

همان طور که مشاهده می کنید، به هر سه لایه، یک سطر جدید اضافه شد. اما ممکن است شما تصمیم بگیرید که این سطر را حذف کنید. برای حذف کردن این سطر، باید با استفاده از یک ماتریس خالی([]) آن را به null(تهی) ست کنید. برای امتحان کردن این موضوع، عبارت ak(3, :, :) = [] را تایپ کنید و کلید Enter را فشار دهید، نتیجه ی زیر ظاهر خواهد شد:

 

 اکنون ممکن است این سوال برای شما پیش بیاید که چطور می توان یک سطر یا یک ستون را تنها به یک لایه اضافه کرد. برای پاسخ به این سوال، عبارت [ak(:, 4, 1) = [88, 99 را در متلب تایپ کنید و کلید Enter را فشار دهید. خواهید دید که این دستور، چهارمین ستون را تنها در لایه ی 1 ایجاد می کند و آن را با مقادیر 88 و 99 پر می کند. خروجی به صورت زیر خواهد بود:

توجه کنید که دیگر لایه ها نیز دارای چهارمین ستون می شوند، اما به وسیله ی صفرها توسط متلب به طور اتوماتیک پر می شوند. 

دیدگاه‌ها  

0 # Kamrancv2 1396-04-22 13:34
یک ماتریس 3×3 دارم میخوام یک سطر و ستون در اول ماتریس بهش اضافه کنم تا 4×4 بشه و در جایی دیگه میخوام در وسط ماتریس سطر و ستون اضافه کنم چه دستوری باید استفاده کنم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-04-23 08:07
برای انجام کارهایی که گفتید، چهار تابع ایجاد کرده ام که می تونید از لینک زیر دانلود کنید:
http://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

>>
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # تبسم 1396-04-16 03:06
با سلام میخواستم 30 سطر و 30 ستون اول ماتریسم رو حذف کنم باید چکار کنم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-04-16 10:15
سلام. برای انجام این کار تابعی به نام removeMatrix ایجاد کرده ام که می تونید از لینک زیر دانلود کنید:
http://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
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # جواد123 1396-03-26 14:27
با سلام
ممنون از پاسخ شما,ولی وقتی دستور (a = getVec(x100,100 را وارد می کنم در قسمت a برای هر درایه مورد نظر که کلیک می کنم 99 درایه صفر را نشان می دهد در صورتی که در ماتریس های اصلی عدد وجود دارد
نکته:همه 100 ماتریس من قبلا در قسمت workspace آورده شده است
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-03-26 17:18
سلام.
بنده چون از نحوه ی ذخیره سازی ماتریس های شما اطلاع نداشتم تابع رو این طوری نوشتم. اما الان که گفتید این 100 ماتریس در workspace تعریف شده اند، میشه با استفاده از یک حلقه ی for کاری کرد که عملیات به طور اتوماتیک انجام شود. اگر امکانش وجود داره، ماتریس های خودتون رو به ایمیل بنده که در زیر نوشتم ارسال کنید تا دقیقا مشکل گزارش شده رو بتونم اصلاح کنم:
sbaloot@beyamooz.com

همچنین اگر می خواهید به نظرات پاسخ دهید، در ذیر نظر قبلی، بر روی "پاسخ دادن" کلیک کنید تا دیگران بتوانند بحث را دنبال کنند.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # جواد١٢٣ 1396-03-25 19:28
سلام
من ١٠٠ ماتريس ٣٠ در ٤٠ دارم كه روي هم قرار دادم
مي خواهم هردرايه ماتريس ها با هم يك ماتريس جديد تشكيل دهند
يعني ١٢٠٠ ماتريس ١٠٠ در ١
چه كار بايد كرد
ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-03-26 00:31
سلام.
برای انجام این کار، یک تابع ایجاد کردم. نام این تابع را getVec قرار داده ام.
با کلیک بر روی لینک زیر می توانید این تابع را دانلود کنید:
http://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
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # هشام 1396-03-01 02:50
سلام .
می خواستم یه ماتریس بزرگ را به یک ماتریس 1×1 یا اینکه یک سطر و ستون داشته باشه تبدیل کنم.چه دستوری باید به مطلب بدم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-03-01 10:30
سلام. از علامت دونقطه به صورت زیر استفاده کنید:
>> 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
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شیما4 1396-02-01 16:43
سلام ببخشید من یک سوالی داشتم.اگر یک ارایه ی سلولی وجود داشته باشه که یک ستونش شامل استیرینگ و حرف باشه و یک ستونش به صورت عددی باشه ،برای حذف یک سطر از این ارایه باید چه کار کرد؟به طوری که سایز اون هم کم بشه؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-02-01 17:50
سلام.
به مثال زیر توجه کنید:
>> myArray = {'hello';'world';'are';'you';'there'};
>> ToRemove = [1:5]

ToRemove =

1 2 3 4 5

>> myArray(ToRemov e) = [];
>>

ابتدا یک آرایه سلولی یک سطری به نام myArray ایجاد کرده ایم. سپس در متغیر ToRemove، اندیس هایی که می خواهیم حذف شوند را مشخص کرده ایم. و در آخر آنها را برابر با [] یا همان null قرار داده ایم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # shekoofeh 1395-09-29 12:05
با سلام من یک ماتریس تک سطر و ده ستونی دارم و میخوام دو ستون بهش اضافه کنم.با مقادیر صفر
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1395-09-30 09:36
سلام.
اگر می خواهید این دو ستون به آخر ماتریس مورد نظر اضافه شود، به صورت زیر عمل کنید:
>> 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
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # yekta 1395-09-23 15:30
با سلام
وقت بخیر
برای بدست آوردن 5 سطر اول مینیمم در یک ماتریس دو بعدی چ دستوراتی در متلب داریم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1395-09-23 16:25
سلام.
منظورتون از "5 سطر اول مینیمم" رو بیشتر توضیح بدید. آیا منظور شما پیدا کردن مقدار مینیمم در 5 سطر اول یک ماتریس هست؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن