41

xの要素の総数をlength(x)返しmax(size(x))たり返したりすることは知っていますが、1行n列の配列にはどちらが適していますか?numel(x)それは重要ですか、それともこの場合は互換性がありますか?

編集:キックのためだけに:

代替テキスト

10万個の要素に到達するまで、パフォーマンス的には同じように見えます。

4

3 に答える 3

21

1行N列の配列の場合、これらは基本的に同じです。多次元配列Mの場合、異なる結果が得られる可能性があります。

  • numel(M)と同等prod(size(M))です。
  • length(M)と同等max(size(M))です。が空の場合M(つまり、任意の次元が0の場合)、length(M)は0です。
于 2010-06-25T16:38:58.310 に答える
19

その場合、それらは同じものを返し、違いはありません。パフォーマンスの点では、MATLABの配列の内部動作に依存します。たとえば、配列に含まれる要素の数に関するメタ情報がある場合(形状に関係なく)、numelは可能な限り高速ですが、max(size(x))は、同じものを取得するためにより多くの作業が必要になるようです(サイズを取得します。そして、それらの中から最大値を見つけます)。私はその場合に使用するのに慣れていますnumelが、パフォーマンススピーチ(仮想)は別として、それらは交換可能であると言えます。

于 2010-06-25T16:44:37.443 に答える
12

他の人が言ったように、それらは一次元配列でも同じです。

コードの可読性の観点からのIMHOはlength、1次元配列で使用する必要があります。それは「インテンショナルプログラミング」についてです。コードを見て、プログラマーが自分の仕事を思いついたときに何を考えていたかを理解します。ですから、私が見るnumelと、それがマトリックスで使用されていることがわかります。

lengthvs.numelは、何年にもわたって私たちのチームで議論されたトピックでした。元上級開発者は、コードの信頼性については気にせずnumel、他の方法では読みにくい/フォーマットされたコードでのみ行われ、使用される作業についてのみ気にしました。他の人は数学者でありlength、彼のために「実際の」配列である数値配列でのみ使用されます。セル配列と構造体配列には、彼が使用しnumelました。

于 2010-06-25T16:52:18.317 に答える