1

Matlabで次のことに気付きました。

>> a = [1, 3];
>> a(3, 4) = 1
a =

 1     2     0     0
 0     0     0     0
 0     0     0     1
>> a(5, 4)
??? Attempted to access a(5,4); index out of bounds because size(a)=[3,4].

a最初は 1 x 2 のサイズではありませんか? に書き込むときは境界外と文句を言わないのにa(3, 4)、読んだときだけ文句を言うのはなぜa(5, 4)ですか?

4

1 に答える 1

8

配列内の以前に存在しなかった要素に書き込むと、配列は新しいサイズに拡張され、数値配列の場合はゼロで埋められ、セルや構造体などの空の要素は埋められます。自分で配列を拡張するには多くの入力が必要になるため、これは便宜上行われます。実際のコードでは、読みやすさが低下する可能性があるため、このような配列サイズの変更は避けたい場合が多いことに注意してください。繰り返しが多いループ内でこのような配列を大きくすると、パフォーマンスに著しく影響を与える可能性があります。したがって、一般的には、配列を正しいサイズに事前に割り当てる方が適切です (これには、パディング値を制御できるという追加の利点があります)。

存在しない要素を読み取りたい場合、読み取れるものはありません。おそらく、Matlab は 0 または を返すNaN可能性がありますが、境界外の読み取りは、書き込みよりも意図的に発生する可能性がはるかに低いため、Matlab はエラーをスローします。

于 2011-03-07T15:18:34.993 に答える