كيف يمكنني تغيير حجم مصفوفة في ماتلاب؟
سؤال
لنفترض أن لدي 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()
.
لا تنتمي إلى StackOverflow