Main Content

tall 配列要素のインデックス付けと表示

tall 配列が大きすぎてメモリに収まらない場合、一般的に、配列全体ではなくデータのサブセットを表示します。このページでは、tall 配列を部分的に抽出し、表示する方法を説明します。

配列の最初の数行の抽出

tall 配列の最初の数行を抽出するには、関数 head を使用します。head は配列の評価を強制しないため、結果を表示するには gather を使用しなければなりません。

tt = tall(table(randn(1000,1),randn(1000,1),randn(1000,1)))
tt =

  1,000×3 tall table

      Var1        Var2        Var3  
    ________    ________    ________

     0.53767      0.6737     0.29617
      1.8339    -0.66911      1.2008
     -2.2588    -0.40032      1.0902
     0.86217     -0.6718     -0.3587
     0.31877     0.57563    -0.12993
     -1.3077    -0.77809     0.73374
    -0.43359     -1.0636     0.12033
     0.34262     0.55298      1.1363
       :           :           :
       :           :           :
t_head = gather(head(tt))
t_head =

  8×3 table

      Var1        Var2        Var3  
    ________    ________    ________

     0.53767      0.6737     0.29617
      1.8339    -0.66911      1.2008
     -2.2588    -0.40032      1.0902
     0.86217     -0.6718     -0.3587
     0.31877     0.57563    -0.12993
     -1.3077    -0.77809     0.73374
    -0.43359     -1.0636     0.12033
     0.34262     0.55298      1.1363

配列の最後の数行の抽出

同様に、tall 配列の最後の数行を抽出するには、関数 tail を使用します。

t_tail = gather(tail(tt))
t_tail =

  8×3 table

      Var1        Var2        Var3  
    ________    ________    ________

     0.64776     0.47349    -0.27077
    -0.31763      1.3656     0.43966
       1.769     -1.6378    -0.50614
      1.5106      2.0237    -0.18435
     0.16401     0.77779       0.402
    -0.28276     -0.5489     0.53923
      1.1522    -0.12601    -0.73359
     -1.1465     0.29958    -0.26837

tall 配列のインデックス

すべての tall 配列で小かっこのインデックス付けがサポートされています。T(A)T(A,B) のように、tall 配列で小かっこを使用してインデックス付けをすると、結果は、指定された行と列 (または変数) のみを含む新しい tall 配列になります。

tall 配列の他のほとんどの操作と同じように、インデックス式は直ちに評価されません。gather を使用してインデックス操作を評価しなければなりません。詳細については、tall 配列の遅延評価を参照してください。

以下のタイプのインデックス付けは tall 配列の最初の次元で実行できます。

  • B = A(:,…)。ここで、:A のすべての行を選択します。

  • B = A(idx,…)。ここで、idx は tall 数値列ベクトルまたは非 tall 数値ベクトルです。

  • B = A(L,…)。ここで、LA と同じ高さの tall または非 tall logical 配列です。たとえば、tt(tt.Var1 < 10,:) のように関係演算子を使用できます。tall logical 配列を使用して tall 配列にインデックス付けする場合、いくつかの要件があります。各 tall 配列は以下でなければなりません。

    • 最初の次元が同じサイズである。

    • 単一の tall 配列から派生している。

    • 最初の次元のインデックス付けがそれぞれ異なっていない。

  • B = A(P:D:Q,…) または B = A(P:Q,…)。ここで、P:D:Q および P:Q は有効な colon インデックス式です。

    • head(tt,k)tt(1:k,:) のショートカットを提供します。

    • tail(tt,k)tt(end-k:end,:) のショートカットを提供します。

さらに、指定しなければならない添字の数は、配列の次元数に応じて変わります。

  • tall 列ベクトルの場合、t(1:10) のように 1 つの添字を指定できます。

  • tall 行ベクトル、tall table および tall timetable の場合、添字を 2 つ指定しなければなりません。

  • 2 つ以上の次元をもつ tall 配列の場合、2 つ以上の添字を指定しなければなりません。たとえば、配列に 3 つの次元がある場合、tA(1:10,:,:) または tA(1:10,:) のような式は使用できますが、tA(1:10)tA(:) のような線形インデックス付け式は使用できません。

ヒント

関数 find は tall 列ベクトル内の非ゼロ要素を探し出し、特定の条件を満たす要素のインデックスのベクトルを生成するのに役立ちます。たとえば、k = find(X<0)X 内のすべての負の要素の線形インデックスを返します。

たとえば、小かっこのインデックス付けを使用して tt の最初の 10 行を取得します。

tt(1:10,:)
ans =

  10×3 tall table

      Var1        Var2        Var3  
    ________    ________    ________

     0.53767      0.6737     0.29617
      1.8339    -0.66911      1.2008
     -2.2588    -0.40032      1.0902
     0.86217     -0.6718     -0.3587
     0.31877     0.57563    -0.12993
     -1.3077    -0.77809     0.73374
    -0.43359     -1.0636     0.12033
     0.34262     0.55298      1.1363
       :           :           :
       :           :           :

テーブル変数 Var1 の最後の 5 つの値を取得します。

tt(end-5:end,'Var1')
ans =

  6×1 tall table

      Var1  
    ________

       1.769
      1.5106
     0.16401
    -0.28276
      1.1522
     -1.1465

tall table から 100 行目ごとに行を取得します。

tt(1:100:end,:)
ans =

  10×3 tall table

      Var1         Var2         Var3  
    _________    _________    ________

      0.53767       0.6737     0.29617
      0.84038    -0.041663    -0.52093
      0.18323       1.3419    0.052993
     0.079934     -0.40492     -1.6163
      0.26965      -1.5144     0.98399
    -0.079893      -1.6848    -0.91182
      0.47586      -2.1746      1.1754
       1.9085     -0.79383     0.18343
        :            :           :
        :            :           :

tall テーブルの変数の抽出

tall table または tall timetable の変数は、それぞれ基となるデータ型が異なる tall 配列です。timerangewithtolvartype の使用を含む、table と timetable の標準的なインデックス手法は、tall table と tall timetable にも適用されます。

たとえば、ドット表記 T.VariableName を使用して tall table をインデックス付けし、1 つの変数のデータを tall 配列として取得します。

tt.Var1
ans =

  1,000×1 tall double column vector

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077
   -0.4336
    0.3426
      :
      :

正確な変数名を思い出せない場合は、タブ補完を使用してテーブル内の変数を検索します。たとえば、tt. と入力し、Tab キーを押します。メニューが表示されます。

Screenshot showing MATLAB command line, with "tt." entered and a tab completion menu of possible values.

複数のレベルのインデックス付けを実行することもできます。たとえば、変数 Var2 の最初の 5 つの要素を抽出します。この場合、tall 配列のインデックス付けでサポートされている形式のいずれかを小かっこ内で使用しなければなりません。

tt.Var2(1:5)
ans =

  5×1 tall double column vector

    0.6737
   -0.6691
   -0.4003
   -0.6718
    0.5756

インデックス付け情報の詳細については、table 内のデータへのアクセスまたはtimetable での時間の選択を参照してください。

tall 配列での連結

[A1 A2 A3 …] のように、2 つ以上の tall 配列を連結するには、各 tall 配列は単一の tall 配列から派生していなければならず、最初の次元でインデックス付けが異なっていてはなりません。インデックス付けの操作には、vertcatsplitapplysortcell2matsynchronizeretime などの関数が含まれます。

たとえば、tt のいくつかの列を連結して新しい tall 行列を作成します。

[tt.Var1 tt.Var2]
ans =

  1,000×2 tall double matrix

    0.5377    0.6737
    1.8339   -0.6691
   -2.2588   -0.4003
    0.8622   -0.6718
    0.3188    0.5756
   -1.3077   -0.7781
   -0.4336   -1.0636
    0.3426    0.5530
      :         :
      :         :

基となるデータストアの異なる複数の tall 配列を結合するには、write を使用して配列 (または計算結果) をディスクに書き込み、次にこれらの位置を参照する単一の新しいデータストアを作成することをお勧めします。

files = {'folder/path/to/file1','folder/path/to/file2'};
ds = datastore(files);

tall 配列の代入と削除

インデックスを使用して tall 配列の要素を代入する場合も削除する場合も、同じ添字の規則が適用されます。削除は空行列 [] に 1 つ以上の要素を代入することで実行されます。

"( )" の代入

要素を tall 配列に代入するには、一般的な構文 A(m,n,...) = B を使用します。tall 配列 A が存在しなければならず、また 2 番目の次元が空であってはなりません。最初の添字 m は、コロン : または tall logical ベクトルのいずれかでなければなりません。この構文では、B は次のいずれかになります。

  • スカラー

  • A(m,…) から派生した tall 配列。m は前記と同じ添字を示します。たとえば、A(m,1:10) のようになります。

  • 空行列 [] (削除用)

“.”代入

構文 A.Var1 = B を使用したテーブルのインデックス付けの場合、配列 B は適切な行数の tall 配列でなければなりません。通常、B は tall table の既存データから派生させます。Var1 は、tall table 内の新規または既存の変数になります。

テーブルが空の場合でも、通常のテーブルに変数として tall 配列を代入することはできません。

並べ替えられた順序での指定行数の抽出

tall 配列のすべてのデータを並べ替えると、計算が多くなる場合があります。"このデータの年別の最初の行は何ですか?" のような質問に答える場合、必要になるのは tall 配列の先頭または末尾の行のサブセットのみであることがほとんどです。

関数 topkrows はこの目的のために、並べ替えられた順序での指定された行数を返します。たとえば、topkrows を使用して、2 番目の列によって降順に並べ替えられた、先頭から 12 行を抽出します。

t_top12 = gather(topkrows(tt,12,2))
Evaluating tall expression using the Local MATLAB Session:
Evaluation completed in 0.067 sec

t_top12 =

  12×3 table

      Var1       Var2       Var3  
    ________    ______    ________

     -1.0322    3.5699     -1.4689
      1.3312    3.4075     0.17694
    -0.27097    3.1585     0.50127
     0.55095    2.9745       1.382
     0.45168    2.9491     -0.8215
     -1.7115    2.7526     -0.3384
    -0.21317    2.7485      1.9033
    -0.43021    2.7335     0.77616
    -0.59003    2.7304     0.67702
     0.47163    2.7292     0.92099
    -0.47615     2.683    -0.26113
     0.72689    2.5383    -0.57588

tall 配列の内容の要約

関数 summary は、tall table または timetable の各変数について、数値変数の最小値と最大値や、categorical 変数の各カテゴリの出現回数など、有用な情報を返します。

たとえば、outages.csv データ セットの tall table を作成し、概要情報を表示します。このデータ セットには、数値、datetime、および categorical 変数が含まれています。

fmts = {'%C' '%D' '%f' '%f' '%D' '%C'};
ds = tabularTextDatastore('outages.csv','TextscanFormats',fmts);
T = tall(ds);
summary(T)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.16 sec
- Pass 2 of 2: Completed in 0.19 sec
Evaluation completed in 0.46 sec

Variables:

    Region: 1,468×1 categorical
        Values:

            MidWest        142   
            NorthEast      557   
            SouthEast      389   
            SouthWest       26   
            West           354   

    OutageTime: 1,468×1 datetime
        Values:

            Min    2002-02-01 12:18
            Max    2014-01-15 02:41

    Loss: 1,468×1 double
        Values:

            Min            0     
            Max            23418 
            NumMissing     604   

    Customers: 1,468×1 double
        Values:

            Min            0          
            Max            5.9689e+06 
            NumMissing     328        

    RestorationTime: 1,468×1 datetime
        Values:

            Min            2002-02-07 16:50 
            Max            2042-09-18 23:31 
            NumMissing     29               

    Cause: 1,468×1 categorical
        Values:

            attack                294  
            earthquake              2  
            energy emergency      188  
            equipment fault       156  
            fire                   25  
            severe storm          338  
            thunder storm         201  
            unknown                24  
            wind                   95  
            winter storm          145 

計算結果のサブセットを返す

このページの例の多くは、gather を使用して式を評価し、結果をメモリに格納します。ただし、これらの例では、一度に数行しかインデックス付けしないため、結果は容易にメモリに収まります。

式の結果がメモリに収まるかどうかわからない場合は、gather(head(X)) または gather(tail(X)) を使用することお勧めします。これらのコマンドは、キューに入っているすべての計算を評価しますが、メモリに確実に収まる少量の結果のみを返します。

計算の結果がメモリに収まらないことが明らかな場合は、write を使用して tall 配列を評価し、代わりに結果をディスクに書き込みます。

参考

| | | | |

関連するトピック