2016-04-11 9 views
2

私は、heightとのMATLABのテーブルの関数を調べています。ドキュメントで、例えばheightを取る:テーブルのサイズと高さ/幅の違いは何ですか?

H = HEIGHT(T)は表Tの行数を返します。
HEIGHT(T)は、SIZE(T,1)に相当します。

edit heightでコードを検査すると、クラスメソッドh = t.nrows;が呼び出されたようです。

widthについても同様の状況が発生します。これらの機能の違いは何ですか?

+0

ドキュメント「 –

答えて

3

実際には同じものです。しかし、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は入力tablehは出力引数です。

>> 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;

概念上、違いはありません。 nrowsnvarsとの私の推測は、これを高速化するためにクラス内で行われている関数呼び出しを最小限に抑えたいからです。 sizeは関数呼び出しなので、テーブルの行と列を直接与える属性を持つ方が関数を使って返すよりも高速です。もう1つの理由は、size(ネイティブ)が数値配列の場合のみである可能性があります。数値以外のオブジェクトがあり、nrowsおよびnvarsがこの動作をエンコードする方法である場合は、カスタム動作を作成する必要があります。あなたはsizeのソースを調べる場合は実際には、特にtable方法のために、あなたは再び、これはすべての投機的です... nrowsnvarsはあなたのための右の数字を返すために使用されていることがわかります。あなたがこれを払わなければならないのは、heightとを使用し、数値配列でsizeを呼び出したかのようにその結果を解釈することです。

+0

」から「幅(T)はSIZE(T、2)と等価です」詳細な例をありがとう。 「高さ」と「幅」だけが速度を向上させるという仮説ですか? – Alex

+0

@Alex私はこう言っています。それは、「サイズ」が数値配列に対してのみ定義されているためです。 'table'のようなカスタムオブジェクトを作成する場合は、高さと幅を決める独自のメソッドを実装する必要があります。したがって、' nrows'と 'nvars'はこの動作をエンコードする方法です。 – rayryeng

+0

あなたはかなり正しいです。テーブルメソッド 'size'は実際には' nrows'と 'nvars'を呼び出します。 – Alex

関連する問題