ArrayFire:09 Forgeでのビジュアル化
目次前言 一、紹介 二、ウィンドウ設定 三、図形描画関数 1. Image 2. Plot 3. Plot3 4. Histogram 5. Surface
四、結論 前言
『ArrayFire:08配列とマトリクス操作を遊ぶ』では、ArrayFireの統一バックエンドを理解しています.この編では、ForgeでのArrayFireの可視化操作を引き続き学びます.
一、紹介
ArrayFireはライブラリとして、高性能、パラレル、GPUコンピューティングに堅牢で使いやすいプラットフォームを提供することを目的としています.Forge--OpenGLビジュアル化ライブラリ--同じように丈夫なビジュアル化を提供し、Arrayfireデータ構造とOpenGLを相互運用できることを目標としています.Arrayfireはaf::arrayを可視化するための簡単なインタフェースとして設計されたパッケージ関数を提供する.これらの関数は、さまざまな相互運用タスクを実行します.特別な例として、GPUからホストにデータをコピーして再フォーマットしてからGPUに戻るのではなく、GPU-dataからGPU-framebufferに直接データ図面を抽出することができます.これにより、メモリコピーが2つ節約されます.可視化はマウスで操作できます.次のことができます.
-ズーム(Alt+マウスの左クリック、上下移動)-パン(左クリック、ドラッグ)-回転(マウスの右クリック-ボールの回転を追跡)
次に、Forgeでどのようなビジュアル効果を示すか、Arrayfireが2つのライブラリ間でデータをどのように処理するかを見てみましょう.
二、ウィンドウの設定
Forge関数を呼び出す前に、関連するcanvasクラスを作成する必要があります.Forme関数はaf::Windowクラスに追加されます.まず、ウィンドウを作成します.
ArrayFireには描画ループも追加されているので、Forgeの描画関数を使用してウィンドウを描画できます.
三、図形描画関数
次に、一般的な図形描画関数について説明します.
1. Image
af::Window::image()関数の役割は、階調またはカラー画像を描くことです.階調画像を描画するには、2 D配列を関数に渡す必要があります.静的ノイズの例を見てみましょう.
前述の例を調整することにより、設定画像のRGB値が3となり、カラーノイズが発生する.
注意:Formeは、ArrayFireから送信されたaf::arrayタイプを自動的に処理します.最初の例では、[0,1]の範囲の浮動小数点数画像を入力した.前の例では、配列を[0255]の範囲のシンボルレスバイト配列に変換しました.すべてのFormeプロット関数のタイプ処理属性は一致しています.
2. Plot
af::Window::plot()関数は配列を2 D線図に可視化します.簡単な例を見てみましょう
plot関数には、次のような特徴があります.
図形描画には、これらの点のx座標とy座標が必要です.これらのパラメータは、不均一であってもよく、パラメータ化されていてもよい.
3. Plot3
af::Window::plot 3()関数には、次のような特徴があります.
配列を入力するには、XYZ座標を順番に入力する必要があります.これらの点は、1次元(3 nx 1)配列であってもよいし、(3 xn)または(nx 3)の行列であってもよい.
4. Histogram
af::Window::hist()関数は、入力配列をヒストグラムにレンダリングする役割を果たします.次の例では、入力配列はArrayfireのhistogram()関数を使用して作成され、各サンプルが計算および格納されます.histogram()の出力はaf::Window::hist()関数に直接入力できます.
ヒストグラム配列に加えてaf::Window::hist()関数は、ヒストグラム配列内のすべてのデータ点の最小値と最大値の2つの他のパラメータを受け入れます.これは、データを格納する範囲を効果的に設定します.
5. Surface
af::Window::surface()関数は配列を3 Dサーフェスに描画します.
af::Window::surface()関数には2つのリロードがあります.
2番目のリロードには、X、Y座標ベクトルの2つのオプションがあります.m x nのサイズの表面メッシュを仮定します.は、各軸の間隔に沿ったベクトルを定義する.ベクトルの大きさはm x 1とn x 1である. は、各点座標のベクトルを含む.各ベクトルの長さはmnx 1である.これは、完全に不均一なサーフェスまたはパラメータサーフェスに使用できます.
四、結論
ArrayFireには、データを可視化するためのかなり包括的な方法があります.高性能GPUグラフィックスライブラリForgeを使用するため、提供されるArrayfire関数は、可視化を可能な限り簡単にするだけでなく、Arrayfireライブラリの残りの部分の堅牢性を維持します.
『ArrayFire:08配列とマトリクス操作を遊ぶ』では、ArrayFireの統一バックエンドを理解しています.この編では、ForgeでのArrayFireの可視化操作を引き続き学びます.
一、紹介
ArrayFireはライブラリとして、高性能、パラレル、GPUコンピューティングに堅牢で使いやすいプラットフォームを提供することを目的としています.Forge--OpenGLビジュアル化ライブラリ--同じように丈夫なビジュアル化を提供し、Arrayfireデータ構造とOpenGLを相互運用できることを目標としています.Arrayfireはaf::arrayを可視化するための簡単なインタフェースとして設計されたパッケージ関数を提供する.これらの関数は、さまざまな相互運用タスクを実行します.特別な例として、GPUからホストにデータをコピーして再フォーマットしてからGPUに戻るのではなく、GPU-dataからGPU-framebufferに直接データ図面を抽出することができます.これにより、メモリコピーが2つ節約されます.可視化はマウスで操作できます.次のことができます.
-ズーム(Alt+マウスの左クリック、上下移動)-パン(左クリック、ドラッグ)-回転(マウスの右クリック-ボールの回転を追跡)
次に、Forgeでどのようなビジュアル効果を示すか、Arrayfireが2つのライブラリ間でデータをどのように処理するかを見てみましょう.
二、ウィンドウの設定
Forge関数を呼び出す前に、関連するcanvasクラスを作成する必要があります.Forme関数はaf::Windowクラスに追加されます.まず、ウィンドウを作成します.
const static int width = 512, height = 512;
af::Window window(width, height, "2D plot example title");
do{
//drawing functions here
} while( !window.close() );
ArrayFireには描画ループも追加されているので、Forgeの描画関数を使用してウィンドウを描画できます.
三、図形描画関数
次に、一般的な図形描画関数について説明します.
1. Image
af::Window::image()関数の役割は、階調またはカラー画像を描くことです.階調画像を描画するには、2 D配列を関数に渡す必要があります.静的ノイズの例を見てみましょう.
array img = constant(0, width, height); //make a black image
array random = randu(width, height); //make random [0,1] distribution
img(random > 0.5) = 1; //set all pixels where distribution > 0.5 to white
window.image(img);
前述の例を調整することにより、設定画像のRGB値が3となり、カラーノイズが発生する.
array img = 255 * randu(width, height, 3); //make random [0, 255] distribution
window.image( img.as(u8) );
注意:Formeは、ArrayFireから送信されたaf::arrayタイプを自動的に処理します.最初の例では、[0,1]の範囲の浮動小数点数画像を入力した.前の例では、配列を[0255]の範囲のシンボルレスバイト配列に変換しました.すべてのFormeプロット関数のタイプ処理属性は一致しています.
2. Plot
af::Window::plot()関数は配列を2 D線図に可視化します.簡単な例を見てみましょう
array X = seq(-af::Pi, af::Pi, 0.01);
array Y = sin(X);
window.plot(X, Y);
plot関数には、次のような特徴があります.
void plot( const array &X, const array &Y, const char * const title = NULL );
図形描画には、これらの点のx座標とy座標が必要です.これらのパラメータは、不均一であってもよく、パラメータ化されていてもよい.
array t = seq(0, 100, 0.01);
array X = sin(t) * (exp(cos(t)) - 2 * cos(4 * t) - pow(sin(t / 12), 5));
array Y = cos(t) * (exp(cos(t)) - 2 * cos(4 * t) - pow(sin(t / 12), 5));
window.plot(X, Y);
3. Plot3
af::Window::plot 3()関数には、次のような特徴があります.
void plot3 (const array &in, const char * title = NULL);
配列を入力するには、XYZ座標を順番に入力する必要があります.これらの点は、1次元(3 nx 1)配列であってもよいし、(3 xn)または(nx 3)の行列であってもよい.
array Z = seq(0.1f, 10.f, 0.01);
array Y = sin(10 * Z) / Z;
array X = cos(10 * Z) / Z;
array Pts = join(1, X, Y, Z);
//Pts can be passed in as a matrix in the from n x 3, 3 x n
//or in the flattened xyz-triplet array with size 3n x 1
window.plot3(Pts);
//both of the following are equally valid
//window.plot3(transpose(Pts));
//window.plot3(flat(Pts));
4. Histogram
af::Window::hist()関数は、入力配列をヒストグラムにレンダリングする役割を果たします.次の例では、入力配列はArrayfireのhistogram()関数を使用して作成され、各サンプルが計算および格納されます.histogram()の出力はaf::Window::hist()関数に直接入力できます.
const int BINS = 128; SAMPLES = 9162;
array norm = randn(SAMPLES);
array hist_arr = histogram(norm, BINS);
win.hist(hist_arr, 0, BINS);
ヒストグラム配列に加えてaf::Window::hist()関数は、ヒストグラム配列内のすべてのデータ点の最小値と最大値の2つの他のパラメータを受け入れます.これは、データを格納する範囲を効果的に設定します.
void hist(const array & X, const double minval, const double maxval, const char * const title = NULL);
5. Surface
af::Window::surface()関数は配列を3 Dサーフェスに描画します.
array Z = randu(21, 21);
window.surface(Z, "Random Surface"); //equal to next function call
//window.surface( seq(-1, 1, 0.1), seq(-1, 1, 0.1), Z, "Random Surface");
af::Window::surface()関数には2つのリロードがあります.
void surface (const array & S, const char * const title ) // Accepts a 2d matrix with the z values of the surface
void surface (const array &xVals, const array &yVals, const array &S, const char * const title) // accepts additional vectors that define the x,y coordinates for the surface points.
2番目のリロードには、X、Y座標ベクトルの2つのオプションがあります.m x nのサイズの表面メッシュを仮定します.
四、結論
ArrayFireには、データを可視化するためのかなり包括的な方法があります.高性能GPUグラフィックスライブラリForgeを使用するため、提供されるArrayfire関数は、可視化を可能な限り簡単にするだけでなく、Arrayfireライブラリの残りの部分の堅牢性を維持します.