Matlabとオクターブで関数が行列とベクトルの両方を受け入れるが、行列と同じようにベクトルでは同じことをしないさまざまな場合に気づいた。OctaveとMatlab "wat"行列とベクトルの不一致
可変数の行/列の行列を入力すると、ベクトルと解釈され、高さ/幅が1のときに期待しないことが起こり、デバッグが難しくなります。奇妙な条件付きエッジケース。
私は私が見つけたいくつかをリストアップしますが、人々は
(注に実行したものを他の人、私は好奇心が強い:私はコードのみが有効な入力として行列を受け入れるケースを探しています何という引数がカウントされないような非ベクトル行列が与えられた例外)を発生させ
1)「DIAG」行列の対角の平均値または対角行列
のでにベクトルを向けるために使用することができます前者は一般的に正方行列にしか使われていませんが、これはmatlabではそれほど厳しいものではありませんが、OctaveではOctave interperets CTOR論理名と行ベクトルへの「対角行列」すなわち
t=eye(3);
size(diag(t(:,3))) == [3,3]
size(diag(t(:,2))) == [3,3]
size(diag(t(:,1))) == [1,1]
2)インデックスは、論理名が戻ると何かに行ベクトル
インデックスを返すよう、非ゼロ要素と他のすべてのゼロで始まります列ベクトル
a = 1:3;
b = true(1,3);
size(a(b)) == [1, 3]
a = [a; a];
b = [b; b];
size(a(b)) == [6, 1]
3)iは同じ(行/ COL)のベクトルをvとして入力返すインデックスベクトルとベクトルvにインデックス。しかし、いずれか、VまたはI行列である場合、戻り値私と同じ大きさです。
a = 1:3;
b = a';
size(a(b)) == [1, 3]
b = [b,b];
size(a(b)) == [3, 2]
4)MAX、MIN、等和が行列Mの列上で動作individiually Mがの1xNされていない限り、その場合、それらは単一の行ベクトル
a = 1:3
size(max(a)) == [1, 1]
a = [a;a]
size(max(a)) == [1, 3]
maxとM上で動作します引数として次元をとることさえできないので、特に悪いです(和とは異なり)
オクターブ/ MATLABコードを書くときは、他に何か注意すべきですか?
max/minの次元を指定することができます: 'min(rand(3)、[]、1)'または 'max(rand(3)、[]、2)' – Amro