سؤال

لنفترض أن لدي 1-12 المصفوفة وأردت تغيير حجمها إلى 4 --3 مصفوفة. كيف أستطيع فعل هذا؟

الحل الحالي هو نوع من القبيح:

for n = 1:(length(mat)/3)
    out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end

هل هناك طريقة أفضل للقيام بذلك؟

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

المحلول

reshape بالطبع الحل المناسب، كما هو مذكور ggnovice..

ميزة لطيفة من reshape هو أنه يسمح لهذا:

A = 1:12;
B = reshape(A,4,[]);
B =
     1     5     9
     2     6    10
     3     7    11
     4     8    12

لذلك إذا كنت لا تعرف عدد الأعمدة الموجودة، reshape سوف يحسب ذلك لك. بطريقة مماثلة، reshape سوف تملأ عدد الصفوف، إذا تركت ذلك.

C = reshape(A,[],4)
C =
     1     4     7    10
     2     5     8    11
     3     6     9    12

نصائح أخرى

جرب ال إعادة تشكيل وظيفة:

A = (1-by-12 matrix);
B = reshape(A,4,3);

لاحظ أن المصفوفة ب سيتم ملؤها بالعناصر من أ في أزياء ColumentWise (سيتم ملء الأعمدة أي من الأعلى إلى الأسفل، تتحرك من اليسار إلى اليمين).

مثال:

>> A = 1:12;
>> B = reshape(A,4,3)

B =

     1     5     9
     2     6    10
     3     7    11
     4     8    12

لتوسيع حل Gnovice:

إذا كنت بحاجة إلى ترتيب مختلف لبناء مصفوفة، فاستخدم عبر (المشغل) أو permute() لتغيير ترتيب البعد بعد دعا reshape().

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