0

配列の一部 (配列 A の n から n+m までの要素) で作業する必要がある場合、配列 A のこの部分 (B と呼びましょう) から生成する配列が 1 または n から始まる必要があることを知りません。B を 1) 要素 1 から mn までの範囲にするか、2) n から n+m までの範囲にすることができます。何度か、これを混乱させてバグが発生しました。

メモリが制約である場合、2) は要素 1 から n を無駄にします。一方、1) を行うと、A と B を一緒に処理するのが難しくなり、異なるインデックスを使用する必要が生じます。

MatLab でプログラミングするときの各方法の利点は何ですか?

4

1 に答える 1

1

配列インデックスを常にゼロから開始することには利点があります。これは慣例の問題ですが、私の経験では、特に[a, b). そのような間隔の長さは ですb - a。式には s が含まれていないので1、それらを入れるのを忘れることはできません。間隔[0, length)は配列全体です。繰り返しますが、1s は必要ありません。のようなオフセットも s[x, x + sublen)を必要としません1。1 ベースのインデックスではx1、 、x2、などのオフセットを組み合わせるには、x3を慎重に処理する必要があり1ます。

これらの機能の一部は、上に近い間隔で 1 ベースのインデックス作成で取得できますが、すべてが取得できるわけではありません。ほとんどの C、Python、Java などのように、フレームワーク全体がゼロから始まるインデックス、closed-below、open-above 規則を採用すると、すべての関数呼び出しで欠落+ 1やエラーについて考えるのを喜んで避けることができます。- 1は大きな助けになります。

Fortran では、インデックスに任意の基数 (0、1、-5 など) を使用する選択肢があったことを覚えています。これが役立ついくつかのケース (通常は 0 を中心にインデックスを対称にする場合) では、関数呼び出しで配列の取得をラップすることで同じ効果を達成できた可能性があります。これらのケースでは、ほとんどの場合、グリッドによる連続変数のモデル化が含まれていたため、グリッド間隔を 1 以外にして、ポイント間を補間したいことがよくありました。そのためには、関数呼び出しでラップする必要がありました。

私は、Matlab があなたに選択肢を与えたことを知りませんでした (Matlab について話しているのですね?) が、Matlab と Fortran の関係を考えると、それは理にかなっています。上記の議論は最適化とは何の関係もありませんが、あなたが正しいことを理解しており、Matlab が未使用のインデックスをある種のプレースホルダーで埋める場合、ゼロベースのインデックス作成もそれを回避します (意図せずにまるで本物であるかのようなプレースホルダー)。

于 2013-07-16T01:23:36.167 に答える