2017-08-07 4 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'の値が0以外の場合にのみうまくいくことはどう思いますか? 'rand(0,0)'がエラーを出しているという事実に基づいていますか?これはロジック実装とはまったく関係がないので、2つを混同しないでください。 – crazyGamer

+0

私が書いたコードは、0ではないmとnの値について提出しているシステムのチェックポイントを通過します。システムはm = 0とn = 0(空の配列)をチェックし、私の変数transposedArrayは定義されていないと言います。私はm = 0でn = 0の場合は空の配列を返すと思います。 – Hoist

答えて

2

でのおかげであなたがする必要があるすべてはあなたのforループの前に、配列の大きさを確認し、それらがゼロであれば、空行列を返します。 さらに、transposedArrayを初期化するだけです。いずれかの寸法が空白の場合は、ループは何も行いません。

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 = 0(m、n);'で初期化しない理由は決してありません。 – CKT

+0

絶対に同意してください。 – crazyGamer