صفيفان يحددان الإحداثيات 2D، كمؤشر صفيف، في ماتلاب / اوكتاف
سؤال
لدي مجموعة ثنائية الأبعاد، اتصل بها "أ". لدي صفيفان آخران 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
تمثل الصفوف.