私は、height
とのMATLABのテーブルの関数を調べています。ドキュメントで、例えばheight
を取る:テーブルのサイズと高さ/幅の違いは何ですか?
H = HEIGHT(T)
は表T
の行数を返します。
HEIGHT(T)
は、SIZE(T,1)
に相当します。
edit height
でコードを検査すると、クラスメソッドh = t.nrows;
が呼び出されたようです。
width
についても同様の状況が発生します。これらの機能の違いは何ですか?
私は、height
とのMATLABのテーブルの関数を調べています。ドキュメントで、例えばheight
を取る:テーブルのサイズと高さ/幅の違いは何ですか?
H = HEIGHT(T)
は表T
の行数を返します。
HEIGHT(T)
は、SIZE(T,1)
に相当します。
edit height
でコードを検査すると、クラスメソッドh = t.nrows;
が呼び出されたようです。
width
についても同様の状況が発生します。これらの機能の違いは何ですか?
実際には同じものです。しかし、table
Sの行数(数と列数のため、その後nvars
属性)のためのnrows
属性は、実際には、民間の属性であり、我々はグローバルワークスペースでそれにアクセスすることはできません。 table
に基づく方法自体を呼び出すと、ローカルにのみアクセスできます。
は、ここで実行している例です。
T = readtable('patients.dat');
これは100 x 10のデータテーブルです。私は、環境に付属のMATLABの患者データテーブルにロードします。今度はnrows
属性にアクセスしてみましょう:
>> T.nrows
Unrecognized variable name 'nrows'.
いいえ。しかし、あなたが言ったようにheight
のソースを見ると、関数の10行目には1行のコードしかありません。h = t.nrows;
ここで、t
は入力table
、h
は出力引数です。
>> dbstop in height at 10
>> o = height(T);
10 h = t.nrows;
K>> t.nrows
ans =
100
K>> dbquit;
>> dbclear all;
>>
我々が最初に入れた:そのため、その後のは、実際に再びnrows
属性を呼び出してみましょう私たちは、その後height
を呼び出し、MATLABは、この時点で停止してもらおう、のは、height
機能のこの行にブレークポイントを入れてみましょうheight
の中のブレークポイントを10行目に右に呼び出すと、height
が呼び出され、関数の10行目で停止することがわかります。次に、テーブルのnrows
属性を呼び出すと、それが機能します。私は何も見る必要はありませんので、dbquit
を使用してデバッグモードを終了し、次にすべてのブレークポイントをクリアしてください。dbclear all;
概念上、違いはありません。 nrows
とnvars
との私の推測は、これを高速化するためにクラス内で行われている関数呼び出しを最小限に抑えたいからです。 size
は関数呼び出しなので、テーブルの行と列を直接与える属性を持つ方が関数を使って返すよりも高速です。もう1つの理由は、size
(ネイティブ)が数値配列の場合のみである可能性があります。数値以外のオブジェクトがあり、nrows
およびnvars
がこの動作をエンコードする方法である場合は、カスタム動作を作成する必要があります。あなたはsize
のソースを調べる場合は実際には、特にtable
方法のために、あなたは再び、これはすべての投機的です... nrows
とnvars
はあなたのための右の数字を返すために使用されていることがわかります。あなたがこれを払わなければならないのは、height
とを使用し、数値配列でsize
を呼び出したかのようにその結果を解釈することです。
」から「幅(T)はSIZE(T、2)と等価です」詳細な例をありがとう。 「高さ」と「幅」だけが速度を向上させるという仮説ですか? – Alex
@Alex私はこう言っています。それは、「サイズ」が数値配列に対してのみ定義されているためです。 'table'のようなカスタムオブジェクトを作成する場合は、高さと幅を決める独自のメソッドを実装する必要があります。したがって、' nrows'と 'nvars'はこの動作をエンコードする方法です。 – rayryeng
あなたはかなり正しいです。テーブルメソッド 'size'は実際には' nrows'と 'nvars'を呼び出します。 – Alex
ドキュメント「 –