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


رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

#1
با سلام خدمت اساتید
بنده سوالی داشتم در مورد اینکه اگر دو ماتریس هم اندازه داشته باشیم و بخواهیم ماتریسی جدید از این دو ایجاد کنیم با این شرط
که اگر مثلا در ماتریس اول عدد 1 وجود داشت متناظر آن در ماتریس دوم برگردانده شود ، منظور از متناظر یعنی مقدار درایه
در ماتریس دوم دقیقا در همان سطر و ستون ماتریس اول که اعداد 1 در آن قرار دارند به مانند مثال ذیل :

کد:
A =

1 2 3
4 5 6
1 3 1

B =

100 200 300
400 500 600
100 200 400

C =

100 100 400

ماتریس C متشکل از اعداد ماتتریس B متناظر با عدد 1 در ماتریس A می باشند

با تشکر
پاسخ

یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

#2
سلام.
برای همان مثالی که گفتید، کدهای زیر را می نویسیم (قابل اجرا برای هر مثال دیگر) :

کد:
clear all;
close all;
clc;

A=[1 2 3; 4 5 6; 1 3 1]
B=[100 200 300; 400 500 600; 100 200 400]
number=1;

A_total=numel(A);
p=0;
for nn=1:A_total
    if (A(nn)==number)
        p=p+1;
        C(p)=B(nn);
    end
end
C

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

کد:
A =

     1     2     3
     4     5     6
     1     3     1


B =

   100   200   300
   400   500   600
   100   200   400


C =

   100   100   400

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

یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

#3
ممنون از راهنماییتون مشکلمو حل کرد 
فقط یه سوال داشتم   بنده کد زیر و نوشتم که تو اون
 Pixels یه ماتریس  200*145*145 است و b یه ماتریس 145*145 است

کد:
for k=1:16;

 for p=1:200

 a=Pixels(:,:,p);
 c=(a(b == k))';

 end
d(p,:)=c;
end

مشکل اینجاست که وقتی برنامه اجرا میشه فقط یک بار حلقه اجرا میشه و ماتریس d به درستی تشکیل میشه اما دیگه برنامه جلو نمیره و این خطا رو میده :

??? Subscripted assignment dimension mismatch.

در حقیقت خروجی باید 16 تا ماتریس مجزا باشه که تعداد سطراشون همه یکسان اما تعداد ستوناشون متفاوت .
با دستور eval هم سعی کردم اما نتونستم . 

 شرمنده اینقدر سوال می پرسم
من رشتم سنجش از دور و باید همه آنالیزهای تصویری رو با کدهای متلب بنویسم
ممنون اگر راهنمایی بفرمایید

 
پاسخ

یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

#4
خطای dimension mismatch زمانی ایجاد می شود که مثلا شما می خواهید مقادیر یک بردار را در بردار دیگری قرار دهید (با دستور A=B) ولی اندازه دو بردار برابر نیست. بنابراین این که در حلقه هستید، مهم نیست. بلکه دستورات درون حلقه را چک کنید و ببینید که اندازه بردار ها و ماتریس هایی که برابر هم قرار می دهید، چقدر است (با دستور size می توانید اندازه آنها را به دست آورید) و ببینید کدام خط از کدها را اشتباه نوشته اید. در خود خطا هم، شماره خط مربوط به خطا را می نویسد.
 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط hamidhpk

یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

#5
باسلام
خطاى برنامه مربوط به خط ششم مى باشد و دليل آن اين كه براى بار اول كه حلقه اجرا مى شود ماتريس d 
20 * 200 اما وقتى براى بار دوم حلقه اجرا ميشه ماتريس خروجى 26 * 200 كه اينجا خطا ميده
ماتريس هاى بعدى هم ابعادشون متفاوته
چه بايد كرد؟
پاسخ

یافتن مقادیر هر عنصر در یک ماتریس از روی ماتریسی دیگر

#6
معمولا ماتریس ها را با اندازه نهایی آنها، به وسیله دستور zeros ، تعریف می کنند و بعد به مرور، مقدار عناصر آنها را محاسبه کرده و در ماتریس قرار می دهند.
شاید این نکته به شما کمک کنه.
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط hamidhpk ، شماره مجازی امارات


پرش به انجمن:


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