インテル® DAAL 2018 デベロッパー・ガイド

数値テーブル

数値テーブルは、インメモリー数値データ処理の基本的なコンポーネントです。インテル® DAAL は、以下のような、密および疎データ用の非同次および同次数値テーブルをサポートしています。

特徴がすべて同じ基本データ型の場合、同次数値テーブル (つまり、HomogenNumericTable クラスのオブジェクト) と行列 (つまり、MatrixPackedTriangularMatrixPackedSymmetricMatrix クラスのオブジェクト) を使用します。特徴の値は、(観測 1、観測 2、... のように) 行優先順で隣接するブロックとしてメモリーでレイアウトされます。インテル® DAAL では、行列は行列代数演算に最も適した同次数値テーブルです。

メモリー・フットプリントが縮小された三角行列と対称行列では、特別なクラス (PackedTriangularMatrix および PackedSymmetricMatrix) が利用可能です。三角行列と対称行列の表現間を選択するには、DataLayout 列挙子を使用します。


パックド格納形式

非同次数値テーブルを使用すると、データ型が異なるデータ構造を扱うことができます。インテル® DAAL は、2 つの方法 (AOS および SOA) で非同次数値テーブルを表せます。

AOS 数値テーブルは、隣接するメモリーブロックにレイアウトされる観測点 (特徴ベクトル) へのアクセスを提供します。
インテル® DAAL の AOS レイアウト

サンプル

C++: datastructures_aos.cpp

Java*: DataStructuresAOS.java

Python*: datastructures_aos.py

SOA 数値テーブルは、各特徴の観測点がメモリーで隣接してレイアウトされるデータセットへのアクセスを提供します。
インテル® DAAL の SOA レイアウト

サンプル

C++: datastructures_soa.cpp

Java*: DataStructuresSOA.java

Python*: datastructures_soa.py

同次および非同次数値テーブルの最適なデータレイアウトは特定のアルゴリズムに高度に依存します。アルゴリズム固有のガイダンスは、各アルゴリズムの「パフォーマンスに関する考察」セクションを参照してください。

インテル® DAAL は、疎データ (つまり、大量のゼロ要素を含むデータ) をエンコードする特別バージョンの同次数値テーブル用の CSRNumericTable クラスを提供します。ライブラリーは、CSR (Compressed Sparse Row) 形式をエンコーディングに使用します。
0 ベースの CSR

1 ベースの CSR

3 つの配列は、以下のように疎行列 M を記述しています。

CSRNumericTable のコンストラクターで CSRIndexing 型の indexing パラメーターにより、1 ベースの (oneBased) CSR エンコーディングを指定できます。

サンプル

C++: datastructures_csr.cpp

Java*: DataStructuresCSR.java

Python*: datastructures_csr.py

インテル® DAAL は、1 セットの特徴ベクトルと対応するラベルのような、いくつかの論理コンポーネントを含むデータセットへのアクセスを提供するテーブル向けに MergedNumericTable クラスを提供します。このタイプのテーブルにより、1 つのデータソースからそれらのデータ・コンポーネントを読むことができます。この特別なタイプの数値テーブルは、CSRNumericTable を除く任意のタイプの数値テーブルを保持できます。マージされた数値テーブルでは、配列は列で結合されるため、列の数が異なることがあります。入力行列の行の数が異なる場合、マージされたテーブルの行の数は min (r1, r2, ..., rm) と等しくなります。ここで、rii 番目の行列の行の数 (i = 1, 2, 3, ..., m) です。


マージされた数値テーブル

サンプル

C++: datastructures_merged.cpp

Java*: DataStructuresMerged.java

Python*: datastructures_merged.py