我需要編寫將行向量轉換爲矩陣的代碼。舉例來說,如果我有a = 1 2 3 4 5 6 7 8 9
,我想矩陣爲:將行向量轉換爲矩陣
m = [1 2 3;
4 5 6;
7 8 9]
我有這一點,這是行不通的。任何人都可以幫助我嗎?
for i=1:length(a)
m = a(i);
i = i + 1;
end
而且,我不允許使用任何Matlab的內置函數(如reshape
)。
我需要編寫將行向量轉換爲矩陣的代碼。舉例來說,如果我有a = 1 2 3 4 5 6 7 8 9
,我想矩陣爲:將行向量轉換爲矩陣
m = [1 2 3;
4 5 6;
7 8 9]
我有這一點,這是行不通的。任何人都可以幫助我嗎?
for i=1:length(a)
m = a(i);
i = i + 1;
end
而且,我不允許使用任何Matlab的內置函數(如reshape
)。
使用重塑
a = [1 2 3 4 5 6 7 8 9];
A = reshape(a, 3, [])'
,其中第三個參數自動拍攝(的cols數)
或者,如果你不能使用任何MATLAB建立在功能使用這種這裏
A = zeros(3,3); %// or A(3,3) = 0 by thewaywewalk (thank you)
A(:) = a;
A = A';
我不能使用任何MATLAB函數。 –
如果'zeros'也是一個禁止函數,你可以使用'A(3,3)= 0'來進行預分配。 – thewaywewalk
@thewaywewalk是否有任何情況下'零(N,M)'實際上優於'A(N,M)= 0;'?零點當然更安全,因爲這不會修改現有的變量。但是,如果你處於這種情況,你仍然非常煩惱。 – patrik
當然,使用reshape
是將矢量轉換爲矩陣的正確方法。
然而,因爲你不希望使用任何Matlab的功能,你可以使用一個循環
A = zeros(3,3); %// preallocate
for ii=1:3,
A(ii,:) = a((ii-1)*3 + 1:3); %// put one row into place
end
,或者更一般地說,如果你想重塑一個H
* W
載體引入H
-by- W
矩陣:
A = zeros(H,W);
for ii=1:H
A(ii, :) = a((ii-1)*W + 1:W);
end
PS,
注意,最好是not to use i
as a variable name in Matlab。
我不能使用vec2mat或者重塑 –
如果你的向量是1x8,矩陣是2x4還是4x2?或者它只適用於3x3?如果你創建一個你想要的結果大小爲零的矩陣(例如,'A =零(3,3)'),那麼你可以做'A(:)= a'。你將不得不檢查元素是否在矩陣的正確位置。 – David
發佈家庭作業通常不太好,但是當你展示你已經嘗試過的時候,+1 =)看看Shai對你的問題的編輯(你可以點擊「編輯x分鐘前」鏈接)。你的原始循環不是很漂亮=) –