8.2. Arrayファクトリー

Arrayのコンストラクタはパラメータが多く毎回インスタンスを生成するのは面倒です。そのためArrayを生成してくれるファクトリーメソッドも複数存在します。

すでに前の項目で紹介したファクトリーメソッドの一つに「to_device」関数がありますが、それ以外にも便利な関数があります。

この項目で紹介するのは以下の5つの関数です。

Numpyに慣れた読者はお気づきになるかもしれませんが、Numpy配列の操作関数に極めて類似しています。

8.2.1. to_device

基本的にCommandQueueオブジェクトと、numpy配列を引数に指定するだけで、GPU等のデバイスのメモリ空間にデータを移動・コピーします。

pyopencl.array.to_device(
    queue,
    ary,
    allocator=None,
    async=False,
    array_queue=<class 'pyopencl.array._same_as_transfer'>)

引数のaryにはnumpy配列を指定できます。

8.2.2. empty

Arrayのコンストラクタと同様な動作をします。

pyopencl.array.empty(
    queue,
    shape,
    dtype,
    order="C",
    allocator=None,
    data=None)

配列が空の場合に使用できます。

8.2.3. zeros

基本的にempty()と同じですが、配列の要素が0で初期化されたArrayのインスタンスが戻されます。

pyopencl.array.zeros(
    queue,
    shape,
    dtype,
    order='C',
    allocator=None)

shapeは次元とその要素数を指定でき、dtypeではnumpyデータ型を指定できます。

8.2.4. empty_like

既に存在するArrayのshapeやdtypeが同じ新しいインスタンスを生成します。

pyopencl.array.empty_like(
    ary,
    queue=<class 'pyopencl.array._copy_queue'>,
    allocator=None)

8.2.5. zeros_like

既に存在するArrayと類似し、0で初期化されたArrayのインスタンスを戻します。

pyopencl.array.zeros_like(ary)

8.2.6. arange

numpy.arangeと同様の操作でArrayを生成できます。

pyopencl.array.arange(queue, *args, **kwargs)

Copyright 2018-2019, by Masaki Komatsu