سؤال

لدي مصفوفة في MATLAB التي أريد أخذ عينات منها كل إدخال آخر:

a =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16

وأنا أريد:

result =

     1     9    
     3    11    

كيف يمكنني القيام بذلك بدون حلقة؟

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

المحلول

لا أعرف طريقة متعددة الأبعاد للقيام بذلك تلقائيًا ، لكن فهرسة Matlab جيدة بما يكفي إذا كنت سعيدًا بتحديده لكل بعد:

a(1:2:end,1:2:end)

نصائح أخرى

يجب أن يعمل هذا مثالك المحدد:

result = a([1 3],[1 3]);

وبشكل عام:

result = a(1:2:size(a,1),1:2:size(a,2));

لمزيد من التفاصيل حول الفهرسة في MATLAB ، يمكنك التحقق من الوثائق هنا.

لقد وجدت هذا اليوم. A هي المصفوفة الأصلية ، أخذ عينات من كل عنصر s.

Adown=downsample(downsample(A,s)',s)'

إنه يتجول في المصفوفة رأسياً ، ويقوم بنقل ، ثم عينات الاتجاه المتعامد ، ثم ينقل مرة أخرى.

samples_x = floor(linspace(1, size(a,1), new_Nx));
samples_y = floor(linspace(1, size(a,2), new_Ny));
new_a = a(samples_x,samples_y)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top