メインコンテンツ

pagefun

分散配列または GPU 配列の各ページに関数を適用

説明

A = pagefun(FUN,B) は、FUN で指定された関数を分散配列または GPU 配列 B の各ページに適用します。結果 A は結果の各ページを含み、A(:,:,I,J,...) = FUN(B(:,:,I,J,...)) のようになります。A は、B の配列タイプに応じて分散配列または GPU 配列になります。FUN は 2 次元の入力引数を取る関数のハンドルです。

A = pagefun(FUN,B1,...,Bn) は、配列 B1,...,Bn のページを入力引数として使用し、スカラー拡張を有効にして FUN を評価します。スカラーである入力ページの次元はすべて、同じ次元内の他の配列と同じサイズになるよう事実上複製され、A(:,:,I,J,...) = FUN(B1(:,:,I,J,...),...,Bn(:,:,I,J,...)) になります。入力ページ B(:,:,I,J,...),...,Bn(:,:,I,J,...) は、FUN の入力要件をすべて満たしていなければなりません。

pagefun を複数回呼び出す場合は、まずその配列を分散配列または GPU 配列に変換するとより効率的になります。

[A1,...,Am] = pagefun(FUN,___) は、関数 FUNm 個の出力値を返す場合に複数の出力配列 A1,...,Am を返します。pagefun は毎回、pagefun の呼び出しにおける出力の数と同じ回数、すなわち mFUN を呼び出します。FUN でサポートされる数より多くの出力引数を指定して pagefun を呼び出した場合、MATLAB® はエラーを生成します。FUN は異なるデータ型をもつ出力引数を返すことができますが、FUN の各呼び出しにおいて、各出力のデータ型は同じでなければなりません。

すべて折りたたむ

2 つの GPU 配列 A および B を作成します。A は 2 次元の配列 (行列) です。B は 3 次元の配列で、最初の 2 つの次元は行列と同様ですが、3 番目の次元は要素の "ページ" を表します。

M = 300;       % output number of rows
K = 500;       % matrix multiply inner dimension
N = 1000;      % output number of columns
P = 200;       % number of pages
A = rand(M,K,"gpuArray");
B = rand(K,N,P,"gpuArray");

pagefun を使用して、配列 A および B の各ページに行列乗算 (mtimes) を適用します。

C = pagefun(@mtimes,A,B);
s = size(C)    % returns M-by-N-by-P 
s = 1×3

         300        1000         200

より高次元の 2 つの配列 D および E を作成します。D は 5 次元の配列、E は 6 次元の配列です。

M = 3;         % output number of rows
K = 6;         % matrix multiply inner dimension
N = 2;         % output number of columns
P1 = 10;       % size of first array dimension (row size)
P2 = 17;       % size of second array dimension (column size)
P3 = 4;        % size of third array dimension (page size)
P4 = 12;       % size of fourth array dimension
D = rand(M,K,P1,1,P3,"gpuArray");
E = rand(K,N,1,P2,P3,P4,"gpuArray");

pagefun を使用して、配列 D および E の各ページに行列乗算 (mtimes) を適用します。サイズが 1 の次元は、その次元の他の配列と同じサイズになるように暗黙的に拡張されます。

F = pagefun(@mtimes,D,E);
s = size(F)    % M-by-N-by-P1-by-P2-by-P3-by-P4
s = 1×6

     3     2    10    17     4    12

入力引数

すべて折りたたむ

入力の各ページに適用される関数。関数ハンドルとして指定します。各出力引数について、FUN は呼び出されるたびに同じクラスの値を返さなければなりません。

サポートされる FUN の値には以下が含まれます。

  • ほとんどの要素単位の分散配列および GPU 配列の関数

  • @conv

  • @conv2

  • @ctranspose

  • @fliplr

  • @flipud

  • @inv

  • @mldivide

  • @mrdivide

  • @mtimes

  • @norm

  • @qr — GPU 配列の場合、構文 [__] = pagefun(@qr,__) では 1 つの入力配列のみがサポートされ、置換行列を返すことはサポートされません。

  • @rot90

  • @svd — GPU 配列の場合、各ページの行および列のサイズを 32 行 32 列より大きくしてはなりません。

  • @transpose

  • @tril

  • @triu

入力が分散配列である場合、サポートされる FUN の値には以下も含まれます。

  • @lu

入力配列。分散配列または GPU 配列として指定します。

入力配列。分散配列、GPU 配列、または配列として指定します。入力 B1,...,Bn の少なくとも 1 つが分散配列または GPU 配列でなければなりません。分散配列と GPU 配列の両方を入力として使用することはサポートされていません。CPU メモリに格納された各配列は、関数が評価される前に分散配列または GPU 配列に変換されます。同じ配列を指定して pagefun を複数回呼び出す場合は、まずその配列を分散配列または GPU 配列に変換するとより効率的になります。

出力引数

すべて折りたたむ

出力配列。分散配列または GPU 配列として返されます。

拡張機能

すべて展開する

バージョン履歴

R2013b で導入