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,…)
。ここで、L
はA
と同じ高さの 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 配列です。timerange
、withtol
、vartype
の使用を含む、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 キーを押します。メニューが表示されます。
複数のレベルのインデックス付けを実行することもできます。たとえば、変数 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 配列から派生していなければならず、最初の次元でインデックス付けが異なっていてはなりません。インデックス付けの操作には、vertcat
、splitapply
、sort
、cell2mat
、synchronize
、retime
などの関数が含まれます。
たとえば、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 配列を評価し、代わりに結果をディスクに書き込みます。
参考
tall
| table
| topkrows
| head
| tail
| gather