انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ذخیره سازی درایه ها در متغیری دیگر (متلب - MATLAB)

ذخیره سازی درایه ها در متغیری دیگر (متلب - MATLAB)

#1
سلام خدمت همه دوستان
1- فرض کنید یک ماتریس 3 بعدی به صورت(m,n,z) داریم حالا من میخوام این ماتریس 3 بعدی رو تبدیل به تعداد z ماتریس دو بعدی کنم. از چه دستوری باید استفاده کنم؟؟
2- بعد از بدست آوردن z تا ماتریس دو بعدی حالا میخوام درایه های متناظر هر ماتریس رو بردارم و داخل یک بردار دیگه ذخیره کنم. این رو از چه دستوری استفاده کنم؟
توضیح:
خودم این کد رو با استفاده از دستور for نوشتم ولی یکسری مشکلات دارم
مثلا نمیتونم هر ماتریس دو بعدی رو به صورت جدا گانه برداشت کنم و همه ماتریس ها همزمان داده میشه.
پاسخ

ذخیره سازی درایه ها در متغیری دیگر (متلب - MATLAB)

#2
سلام.
برای تبدیل یک ماتریس به چند ماتریس مختلف، بنده دستور خاصی رو نمی شناسم (می توانید در این زمینه تحقیق کنید)، البته دستور reshape برای تغییر اندازه یک ماتریس به کار می رود (کلید شماره 71)، ولی برای تبدیل یک ماتریس به چند ماتریس جداگانه، کاربردی ندارد.
ولی به نظر می آید که راه حل استفاده از حلقه for مناسب خواهد بود، البته بستگی دارد که کدها به چه صورت نوشته شود.
اولین توصیه بنده این است که اگر قرار است در برنامه مورد نظرتان، صرفا بر اساس اطلاعات همان ماتریس اصلی، نتایجی را استخراج کنید، تا حد ممکن سعی کنید که از ساخت ماتریس های جداگانه خودداری کنید، مثلا در مورد شماره 2 که گفتید درایه متناظر از ماتریس ها خوانده شود و در یک بردار ذخیره گردد، خواندن و اجرای آن عملیات از ماتریس اصلی، ساده تر خواهد بود و ساخت چند ماتریس، تنها ما را کمی گیج می کند (منظورم این است که تنها زمانی به سراغ ساخت چند ماتریس بروید که حتما عملیات یا نتایجی را می خواهید انجام بدهید که اجرای آن، نیاز به وجود آن چند ماتریس داشته باشد).
اما به هر حال اگر ساخت چند ماتریس جدا از ماتریس اصلی، مهم است، می توانید بر اساس کلید زیر، یک تعداد ماتریس را با نام های دارای ترتیب عددی بسازید (مثلا با نام های m_1 و m_2 و ... و m_z که می شود z تا ماتریس بر اساس ماتریس اصلی) :

کلید شماره 154

با این نوع ساخت ماتریس، شما خیلی راحت می توانید بر اساس عدد موجود در آخر نام هر ماتریس، به آن ارجاع بدهید. چون پیشوند _m ثابت است و مثلا قرار دادن عدد 6 در آخر آن، متناظر با ماتریس شماره 6 می باشد.
بنده کد زیر را به عنوان یک مثال می نویسم تا شیوه کدنویسی آن را متوجه شوید :

کد پی‌اچ‌پی:
clear all
close all
clc

define A
A
(:,:,1) = [1 2 34 5 67 8 9];
A(:,:,2) = [11 12 1314 15 1617 18 19];
A(:,:,3) = [21 22 2324 25 2627 28 29];
A

build matrix
for kk=1:3
    eval
(['m_'num2str(kk) , ' = A(:,:,' num2str(kk) ,');']);   example   m_1 A(:,:,1);
end

test result
m_1
m_2
m_3 

نکته مهم در کدهای بالا، دستور eval است که به ما امکان اجرای یک رشته (متن) را به عنوان ((کد اجرایی)) می دهد. بنابراین به راحتی می توانیم پسوند عددی مربوط به ماتریس ها که متغیر حلقه for است را در کدهای اجرایی بیاوریم.
نتیجه اجرای کد متلب (MATLAB) بالا :

کد پی‌اچ‌پی:
A(:,:,1) =

 
    1     2     3
     4     5     6
     7     8     9


A
(:,:,2) =

 
   11    12    13
    14    15    16
    17    18    19


A
(:,:,3) =

 
   21    22    23
    24    25    26
    27    28    29


m_1 
=

 
    1     2     3
     4     5     6
     7     8     9


m_2 
=

 
   11    12    13
    14    15    16
    17    18    19


m_3 
=

 
   21    22    23
    24    25    26
    27    28    29 



Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط hhn1370 ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان