2017-08-07 118 views
1

我需要創建我自己的數組轉置例程而不使用轉置(x)。我必須使用嵌套的for-loops來交換數組的列和行。我想出了下面的代碼,但是這隻適用於m和n(列數和行數)的非零值。我怎樣才能調整這段代碼,使它對n = 0和m = 0起作用?在此先感謝0x0陣列的Matlab轉置

clear 
clc 

% set dimensions 
n = 2; 
m = 3; 

firstArray = rand(n,m);; 
for ii = 1:n; 
    for jj = 1:m; 
     transposedArray(jj, ii) = firstArray(ii, jj); %transposing 
    end 
end 

disp(transposedArray); 
+0

@ m0h4mm4d:在MATLAB中,這在技術上是允許的,所以問題在這方面不是無效的。但是,我不明白代碼中的問題,你想讓它成爲一個函數嗎?它將適用於任何2D陣列。 – crazyGamer

+0

@Hoist你怎麼知道它只適用於'm'和'n'的非零值?它是基於'rand(0,0)'給出錯誤的事實嗎?因爲這與邏輯實現完全無關,所以不要混淆這兩者。 – crazyGamer

+0

讓我進一步澄清,我寫的代碼通過我提交的系統的檢查點,其中m和n值不是0.然後系統檢查它是否爲m = 0和n = 0(空數組)說我的變量transposedArray沒有定義。我猜只是返回空數組,如果它是m = 0和n = 0應該足夠。 – Hoist

回答

2

所有你需要做的for循環之前檢查陣列的尺寸,如果它們都爲零,返回空矩陣。 更好的是,只需初始化transposedArray,並且如果任何尺寸爲空,則for循環不執行任何操作。

clear 
clc 

% set dimensions 
n = 2; 
m = 3; 

firstArray = rand(n,m); 

transposedArray = [] % Initialize to blank 

% Aside: If the arrays are large, pre-allocation can improve performance as below: 
% transposedArray = zeros(size(firstArray, 2), size(firstArray, 1)) 

for ii = 1:n; 
    for jj = 1:m; 
     transposedArray(jj, ii) = firstArray(ii, jj); %transposing 
    end 
end 

disp(transposedArray); 
+0

初始化爲空使得'transposedArray'完成它可以分配的最大數量;沒有任何理由不初始化爲'transposedArray = zeros(m,n);'。 – CKT

+0

絕對同意。 – crazyGamer