Cのn長配列のインデックスは0:N-1です。一方、MATLABでは1:NMATLABでゼロベースのインデックスが使用されています
です。これで、Cスタイルのインデックス作成がより快適になりました。従来の1:Nインデックス作成ではなく、Cスタイルのインデックス作成を採用するために、MATLABスクリプトなどにいくつかのコマンドを含めることによって、MATLABに指示する方法はありますか?
Cのn長配列のインデックスは0:N-1です。一方、MATLABでは1:NMATLABでゼロベースのインデックスが使用されています
です。これで、Cスタイルのインデックス作成がより快適になりました。従来の1:Nインデックス作成ではなく、Cスタイルのインデックス作成を採用するために、MATLABスクリプトなどにいくつかのコマンドを含めることによって、MATLABに指示する方法はありますか?
ない、と私は違いは数学者がMATLABは、数学者に適していないことを1(から数え始めるという事実から生じると信じて、逆にそれが使用されています(記号処理がより強力なMathematicaやMapleに比べて)
MATLABに似ていますが、MATLABに似ている場合は、PythonパッケージのNumPy and SciPyを参照してください。
また、ゼロベースと1つのベースのインデックス作成についてはWhy numbering should start at zero、MATLAB固有の説明についてはMATLAB indexing issueを参照してください。これについては、https://plus.google.com/115212051037621986145/posts/YTUxbXYZyfiを参照してください。
wikipediaの素晴らしい概観:http://en.wikipedia.org/wiki/Comparison_of_programming_languages_(array) – zellus
これらのリンクは有益でした。どうもありがとうございました! – smilingbuddha
私は数学者であり、私は0から数えます。(もっと真剣に言えば、数学者はt = 0、t = 1などで時間をインデックスするために使用されます)Matlabは数値解析(微分方程式) – Legendre
:なし...
あなたはは潜在的にあなたがのためにインデックス・スキームを変更することを(ビルトインまたはユーザ定義)のオブジェクトのすべての異なるタイプの機能SUBSREFとSUBSASGNをオーバーロードすることにより、このような何かを行うことができます。組み込み型のメソッドをオーバーロードする方法の例は、my answer〜this questionです。欠点は?...
、ビルトイン種類がインデックスにもリモートで実行可能ではありませんどのように処理するか変更します。しかし、subclassing in MATLAB's OOP systemを使用して別の(しかし、やや危険な)オプションがあります。そして、あなたは、ゼロベースのインデックスを取るSUBSREFとSUBSASGNの特別な実装でdouble_zb
を拡張することができ
classdef double_zb < double
methods
function obj = double_zb(data)
if nargin == 0
data = 0;
end
obj = [email protected](data); % initialize the base class portion
end
end
end
:たとえば、ビルトインdouble
クラスから継承する新しいクラスdouble_zb
を作ることができます。しかし、double
オブジェクトの代わりにdouble_zb
オブジェクトを効果的に使用すると、double
オブジェクトの他のすべてのメソッドを再実装するか、またはdouble
メソッドを使用してdouble_zb
オブジェクトを使用するコンバーターメソッドを実装する必要があります。私はこれを行うことに関わるすべての細部についてもわからないが、確かにそれは巨大な頭痛になると言うことができる。
私の究極のアドバイス...心配しないで、1ベースのインデックス作成を愛する方法を学んでください。 ;)
"この記事を読んでいるときにJW Goetheの「The Sorcerer's Apprentice」 – zellus
最初に指摘したようにSUBSREFとSUBSASGNをオーバーロードすると、0ベースのインデックスを使用するたびにグローバル論理変数を設定できず、 SUBSREFとSUBSASGNがその変数をチェックし、存在しない場合は古典的な1ベースのインデックスを使用しますか?;-) –
実際には、Matlab はではゼロベースのインデックスを使用します。それらは、 (残念なことに、あまり優先度が低く、むしろあくまでも と記載されている)接頭語演算子「1+」、すなわち、
(1+(0:M))
ソース: http://www.mathworks.com/matlabcentral/newsreader/view_thread/11510
私が思う "1+" 1ベースの世界に住んでPPLから来た:1をベースにするために1を追加しますインデックス。
私はMatlabを数学に使用しています。私たちは "start at time = 0"をたくさん使用します。私は時間0,1,2のYの値を表す配列y = [0,1,2,3,4]を持っている場合、例えば、
time(x) = x + 1
:これに対する私の解決策は、関数を作成することでした、3,4。 0は、このようにすべての私の方程式を変更すること回避の正しい結果を生成
y(time(0))
:私はこれを行うことができます。
定期的にMATLABを1つのクラスに使用しなければならない人として、これがどれくらいの可能性があるのかを私はあなたに伝えることはできません。それは 'var ++ 'を行うことができますが、まあ、MATLABには場所があり、その場所は深刻な非数学プログラミングではありません。 –
コードを壊さずにMATLABにそのような機能を追加するのは興味深い作業かもしれません。 – zellus
@zellus - "興味深い定義" ; 「ああ、神様、私たちはすべて死ぬつもりだよ」 – Donnie