صفيفان يحددان الإحداثيات 2D، كمؤشر صفيف، في ماتلاب / اوكتاف

StackOverflow https://stackoverflow.com/questions/2435018

سؤال

لدي مجموعة ثنائية الأبعاد، اتصل بها "أ". لدي صفيفان آخران 2D، اتصل بهم "التاسع" و "IY". أرغب في إنشاء صفيف إخراج عناصرها هي عناصر A في أزواج الفهرس التي توفرها X_IDX و Y_IDX. يمكنني القيام بذلك مع حلقة كما يلي:


for i=1:nx
    for j=1:ny
        output(i,j) = A(ix(i,j),iy(i,j));
    end
end

كيف يمكنني القيام بذلك دون الحلقة؟ إذا قمت بالإخراج = A (IX، IY)، أحصل على قيمة مجموعة كاملة من (ix) x (IY).

شكرا لك، جايسون

هل كانت مفيدة؟

المحلول

طريقة أسرع هي استخدام الفهرسة الخطية مباشرة دون الاتصال Sub2ind:

output = A( size(A,1)*(iy-1) + ix )

... فكر في المصفوفة كصفيف 1D (ترتيب العمود الحكيم)

نصائح أخرى

هذه هي الطريقة الخطية التي ليست فعالة للغاية لمصفوفات كبيرة

reshape(diag(A(ix(:),iy(:))),[ny nx])

ستكون طريقة أوضح وأكثر كفاءة هي استخدامها Sub2ind.. وبعد لقد أدمجت تعليق Yuk للحالات (مثل لك) عندما ix و iy لديك نفس العدد من العناصر:

newA = A(sub2ind(size(A),ix,iy));

أيضا، لا تخلط x و y بالنسبة i و j في التدوين - j و x تمثل عموما الأعمدة و i و y تمثل الصفوف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top