2

1->(a-1)+(a + 1)->nの数値の配列を連結しようとしています。

猫機能を使っていました

cat(2, 1:a-1, a+1:n)

しかし、私はエラーが発生しています

Index exceeds matrix dimensions.

完全に間違っていない限り、2つの数値行列を連結しようとしているだけなので、なぜこのエラーが発生するのかよくわかりません。

私はこれを達成しようとしています:

>> a = 3;
>> n = 10;
>> cat(2, 1:a-1, a+1:n)
ans = 
    [1,2,4,5,6,7,8,9,10]

これは間違った方法ですか?このエラーが発生する理由はありますか?

4

3 に答える 3

6

ワークスペースで呼び出される変数はcatありますか?

>> cat(2, 2:3, 4:6)                   # this works fine
ans =
     2     3     4     5     6
>> cat = 1:3;                         # introduce the variable 'cat'
>> cat(2, 2:3, 4:6)                   # now it breaks
??? Index exceeds matrix dimensions.
于 2012-10-08T15:18:55.747 に答える
2

ワークスペースに名前の付いた変数があるようですcat。クリーンな方法は、もちろん、変数の名前を変更することです。十分に新しいバージョンのMatlab(R2012xだと思います)を使用catしている場合は、割り当てられた最初の行で置き換えることができます(変数を選択すると、灰色のチェックマークが表示されます。ウィンドウの右側、変数が関数のどこで発生するかを示します)、shift+enterすべての発生を置き換えるために使用します。または、[すべて検索/置換]機能を使用することもできます(ただし、部分文字列ではなく、単語のみを置換するようにしてください)。

既存の変数名を置き換えることができない場合は、1次元および/または2次元に沿った連結に角括弧を使用できます。

cat(2,a,b)

と同等です

[a,b]
于 2012-10-08T15:29:34.557 に答える
2

完全を期すために、達成しようとしている連結も次のように達成できます。

R = 1:n;
R = R(R ~= a)

私は個人的にこれはよりきれいに見えると思います

R = [1:a-1 a+1:n]

しかし、それは個人的なことです。1:a-1>5私はいつも(それ((1:a)-1)>5(1:(a-1))>5または(1:a)-(1>5)か...)のようなものに対して少し混乱を感じます。私はいつも一瞬考えなければなりませんが、私の解決策はすぐに理解できます。

于 2012-10-08T15:52:16.413 に答える