使用頻度の高い API について,主要な内容を記述した, ビギナー向けのリファレンスマニュアルです.
SLLIB クラス: | ストリーム / 文字列 / 文字列配列 / 文字列連想配列 / 多次元配列 |
SLLIB クラス用関数: | 多次元配列用の統計用関数 / 多次元配列用の数学関数 / 多次元配列用の複素関数 |
SLLIB クラス以外: | 定数・型の定義 / C99互換の複素数・複素関数 |
SFITSIO クラス: | fitscc / fits_hdu / fits_image / fits_table / fits_table_col / fits_header / fits_header_record |
SFITSIO クラス以外: | 関数 / 定数・型の定義 / FITSファイルの部分読み出し機能 / FITSテンプレート / 規約外FITS拡張 |
多次元配列のクラスの使い方は ストリームの場合と似ており, 「基底クラス」「継承クラス」があります. 基底クラスは「mdarray」で, 継承クラスは「mdarray_double」「mdarray_float」のように 配列で扱う型の名称がつきます.また, 基底クラスは「抽象」ではないので,プログラマが使う事ができます. ただし,ここでは継承クラスを使う場合について, メンバ関数を解説します.
基底クラス | 説明 |
---|---|
mdarray | 型も配列長も可変で,ライブラリの実装などに向いている. 型に依存したメンバ関数が使えないので,配列の1要素ずつのアクセスには向かない. |
通常,プログラマは次に示す継承クラスを使います. 型が固定である事以外のデメリットはなく,異なる型どおしでも, 四則演算を含む様々な演算が可能です.
継承クラス | 説明 | 演算子による演算 |
---|---|---|
mdarray_double | double 型を扱う | Yes |
mdarray_float | float 型を扱う | Yes |
mdarray_uchar | unsigned char 型を扱う | Yes |
mdarray_short | short 型を扱う | Yes |
mdarray_int | int 型を扱う | Yes |
mdarray_long | long 型を扱う | Yes |
mdarray_llong | long long 型を扱う | Yes |
mdarray_int16 | int16_t 型を扱う | Yes |
mdarray_int32 | int32_t 型を扱う | Yes |
mdarray_int64 | int64_t 型を扱う | Yes |
mdarray_bool | bool 型を扱う | - |
mdarray_size | size_t 型を扱う | - |
mdarray_ssize | ssize_t 型を扱う | Yes |
mdarray_uintptr | uintptr_t型を扱う | - |
mdarray_fcomplex | sli::fcomplex 型を扱う | Yes |
mdarray_dcomplex | sli::dcomplex 型を扱う | Yes |
配列データを「継承クラス」「基底クラス」の間で移動させる事ができるので, 必要になった時点でクラスを切り替える事も容易です.
ヘッダファイルは sli/mdarray.h
を include するだけで,
すべての mdarray の継承クラスが使えるようになります.
ヘッダファイル | コード | namespace | 内容 |
---|---|---|---|
#include <sli/mdarray.h> |
cc | sli | すべての mdarray の継承クラスを含む |
#include <sli/mdarray_double.h> 等 |
cc | sli | 各プリミティブ型に対応した mdarray の継承クラス |
動作モードは「自動リサイズモード」「手動リサイズモード」の2種類があります.
「自動リサイズモード」では,
演算子 []
,
メンバ関数 at(), at_cs() 等を使って配列要素にアクセスしたり,
演算子
+=
-=
等を使って配列の演算を行ったり
する時に必要に応じて次元数と配列サイズを自動的に拡張します.
一方,「手動リサイズモード」では,
明示的にリサイズを指示しない限りバッファサイズを変更しません(画像データの扱いに適しています).
動作モードは,オブジェクトを作る時の引数,あるいは init()メンバ関数で指定する事ができます. 例を示します:
mdarray_double arr0(true); /* 自動リサイズモード */ mdarray_double arr1(false); /* 手動リサイズモード */
なお,動作モードは
「=
」演算子
などでコピーされます.
トラブルを避けるため,1つのプログラム内では動作モードを統一する事を推奨します.
3次元までであれば,次のようにオブジェクトを作る時に 初期値を与える事ができます.
const double my_data1[] = {0.02, 0.2, 2.0}; mdarray_double my_darr1(false, 3, my_data1);
const double my_data2[][3] = {{0.02, 0.2, 2.0}, {20.0, 200.0, 2000.0}}; mdarray_double my_darr2(false, 3,2, *my_data2);
const double my_data3[][2][3] = {{{0.02, 0.2, 2.0}, {20.0, 200.0, 2000.0}}, {{0.04, 0.4, 4.0}, {40.0, 400.0, 4000.0}}}; mdarray_double my_darr3(false, 3,2,2, **my_data3);
メンバ関数 | 機能 | 動作モード サポート | 備考 |
---|---|---|---|
大括弧 [] |
[] で指定された要素値の参照を返す (1次元) | Yes | 基底クラスでは使用不可 |
丸括弧 () |
() で指定された要素値の参照を返す (1〜3次元) | Yes | 基底クラスでは使用不可 |
イコール記号 = |
配列の代入 | ||
size_type() | 型を表す整数(型種別)を取得 | ||
bytes() | 配列の1要素のバイト長を取得 | ||
dim_length() | 配列の次元数を取得 | ||
length() | (各次元の)要素数を取得 | ||
byte_length() | (各次元の)配列の総バイト長を取得 | ||
col_length() | 配列の列(x軸)の長さを取得 | ||
row_length() | 配列の行(y軸)の長さを取得 | ||
layer_length() | 配列のレイヤ数を取得 (3次元目以降は縮退) | ||
at(), at_cs() | 指定された要素値の参照を返す (1〜3次元) | 基底クラスでは使用不可 | |
dvalue() | double 型に変換された 1要素の値を取得 | ||
dxvalue() | dcomplex 型に変換された 1要素の値を取得 | ||
lvalue(), llvalue() | 整数型(long or long long)に変換された 1要素の値を取得 | ||
assign() | dcomplex型またはdouble型で指定された値を 1要素へ代入 | Yes | |
array_ptr(), array_ptr_cs() |
指定要素の内部バッファのアドレスを取得 | 基底クラスでは使用不可 | |
array_ptr_2d(), array_ptr_2d_cs() |
内部で生成された2次元配列用ポインタ配列のアドレスを取得 | 基底クラスでは使用不可 | |
array_ptr_3d(), array_ptr_3d_cs() |
内部で生成された3次元配列用ポインタ配列のアドレスを取得 | 基底クラスでは使用不可 | |
get_elements() | 自身の配列をユーザ・バッファへコピー | ||
put_elements() | ユーザ・バッファの配列を自身へコピー | ||
dprint() | オブジェクト情報の標準エラー出力への出力 | ||
copy() | 自身の内容を指定オブジェクトへコピー | ||
cut() | 自身の内容を指定オブジェクトへ移管 | ||
swap() | 2つのオブジェクト間での内容のスワップ | ||
init() | オブジェクトの初期化 | 基底クラスでは仕様が異なる | |
auto_resize(), set_auto_resize() |
自動リサイズの可否に関する設定 | ||
auto_init(), set_auto_init() |
自動初期化の可否に関する設定 | ||
rounding(), set_rounding() |
四捨五入の可否に関する設定 | ||
alloc_strategy(), set_alloc_strategy() |
メモリ確保方法に関する設定 |
メンバ関数 | 機能 | 動作モード サポート | 備考 |
---|---|---|---|
default_value(), assign_default() |
サイズ拡張時の初期値の設定 | 基底クラスでは仕様が異なる | |
resize_1d() | 配列長の変更 (1次元) | ||
resize_2d() | 配列長の変更 (2次元) | ||
resize_3d() | 配列長の変更 (3次元) | ||
increase_dim() | 次元数を1つ拡張 | ||
decrease_dim() | 次元数を1つ縮小 | ||
resize() | 配列長の変更 | ||
reallocate() | 配列のバッファ内位置の調整をせずに,配列用バッファを再確保 | ||
allocate() | 配列用バッファを一旦開放し,新規に確保 | ||
put() | 任意の1つの次元についての指定された区間をパディング | Yes | 基底クラスでは仕様が異なる |
swap() | 任意の1つの次元について配列要素間での値の入れ換え | ||
move() | 任意の1つの次元について配列要素間での値のコピー | ||
cpy() | 任意の1つの次元について配列要素間での値のコピー (配列数は自動拡張) | ||
insert() | 任意の1つの次元について新規配列要素の挿入 | ||
crop() | 任意の1つの次元について配列の不要部分の消去 | ||
flip() | 任意の1つの次元について配列の並びを反転 | 高速化のためSIMD命令を採用 | |
erase() | 任意の1つの次元について配列要素の削除 | ||
transpose_xy() | 自身の配列の (x,y) でのトランスポーズ | 高速なアルゴリズムを採用 | |
transpose_xyz2zxy() | 自身の配列の (x,y,z)→(z,x,y) のトランスポーズ | 高速なアルゴリズムを採用 | |
rotate_xy() | 自身の配列の (x,y) での回転 (90度単位) | 高速なアルゴリズムを採用 | |
reverse_endian() | 自身の型に応じたバイトオーダの調整 | 高速化のためSIMD命令を採用 |
次にように配列の範囲を IDL 的な記法で指定できるメンバ関数の一覧です. 変数を与える時は,printf() の記法を用います.
array1 = array0.sectionf("0:99,*"); array2 = array1.sectionf("*,%d:%d", begin, end);
メンバ関数 | 機能 | 備考 |
---|---|---|
resizef() | 配列長の変更 | |
sectionf() | 一部要素を切り出した配列をテンポラリオブジェクトで取得 | |
copyf() | 一部要素を別オブジェクトへコピー | |
trimf() | 指定部分以外の配列要素の消去 (画像データのトリミング) | |
flipf() | 任意の次元(複数も可)で配列の並びを反転 | 高速化のためSIMD命令を採用 |
transposef_xy_copy() | (x,y)のトランスポーズを行なった配列を取得 | 高速なアルゴリズムを採用 |
transposef_xyz2zxy_copy() | (x,y,z)→(z,x,y)のトランスポーズを行なった配列を取得 | 高速なアルゴリズムを採用 |
cleanf() | 自身の配列をデフォルト値でパディング | |
fillf() | 自身の配列を指定されたスカラー値で書き換え | |
addf() (スカラー) | 自身の配列に,指定されたスカラー値で加算 | |
subtractf() (スカラー) | 自身の配列を,指定されたスカラー値で減算 | |
multiplyf() (スカラー) | 自身の配列に,指定されたスカラー値を乗算 | |
dividef() (スカラー) | 自身の配列を,指定されたスカラー値で除算 | |
pastef() | 自身の配列に指定されたオブジェクトの配列を貼り付け | |
addf() (配列) | 自身の配列に,指定されたオブジェクトの配列を加算 | |
subtractf() (配列) | 自身の配列を,指定されたオブジェクトの配列で減算 | |
multiplyf() (配列) | 自身の配列に,指定されたオブジェクトの配列を乗算 | |
dividef() (配列) | 自身の配列を,指定されたオブジェクトの配列で除算 |
メンバ関数 | 機能 | 備考 |
---|---|---|
section() | 一部要素を切り出した配列をテンポラリオブジェクトで取得 | |
copy() | 一部要素を別オブジェクトへコピー | |
trim() | 指定部分以外の配列要素の消去 (画像データのトリミング) | |
flip_cols() | 配列の水平方向での反転 | 高速化のためSIMD命令を採用 |
flip_rows() | 配列の垂直方向での反転 | 高速化のためSIMD命令を採用 |
transpose_xy_copy() | (x,y)のトランスポーズを行なった配列を取得 | 高速なアルゴリズムを採用 |
transpose_xyz2zxy_copy() | (x,y,z)→(z,x,y)のトランスポーズを行なった配列を取得 | 高速なアルゴリズムを採用 |
clean() | 自身の配列をデフォルト値でパディング | |
fill() | 自身の配列を指定されたスカラー値で書き換え | |
add() (スカラー) | 自身の配列に,指定されたスカラー値で加算 | |
subtract() (スカラー) | 自身の配列を,指定されたスカラー値で減算 | |
multiply() (スカラー) | 自身の配列に,指定されたスカラー値を乗算 | |
divide() (スカラー) | 自身の配列を,指定されたスカラー値で除算 | |
paste() | 自身の配列に指定されたオブジェクトの配列を貼り付け | |
add() (配列) | 自身の配列に,指定されたオブジェクトの配列を加算 | |
subtract() (配列) | 自身の配列を,指定されたオブジェクトの配列で減算 | |
multiply() (配列) | 自身の配列に,指定されたオブジェクトの配列を乗算 | |
divide() (配列) | 自身の配列を,指定されたオブジェクトの配列で除算 |
メンバ関数 | 機能 | 動作モード サポート |
---|---|---|
= (スカラー) |
スカラー値の代入 | |
+= (スカラー) |
自身にスカラー値を加算 | |
-= (スカラー) |
自身からスカラー値を減算 | |
*= (スカラー) |
自身にスカラー値を乗算 | |
/= (スカラー) |
自身からスカラー値を除算 | |
+ (スカラー) |
自身にスカラー値を加算したテンポラリオブジェクトを返す | |
- (スカラー) |
自身からスカラー値を減算したテンポラリオブジェクトを返す | |
* (スカラー) |
自身にスカラー値を乗算したテンポラリオブジェクトを返す | |
/ (スカラー) |
自身からスカラー値を除算したテンポラリオブジェクトを返す | |
= (配列) |
配列の代入 | |
+= (配列) |
自身に配列を加算 | Yes |
-= (配列) |
自身から配列を減算 | Yes |
*= (配列) |
自身に配列を乗算 | Yes |
/= (配列) |
自身から配列を除算 | Yes |
+ (配列) |
自身に配列を加算したテンポラリオブジェクトを返す | |
- (配列) |
自身から配列を減算したテンポラリオブジェクトを返す | |
* (配列) |
自身に配列を乗算したテンポラリオブジェクトを返す | |
/ (配列) |
自身から配列を除算したテンポラリオブジェクトを返す |
type &operator[]( ssize_t idx0 ); ... 1 const type &operator[]( ssize_t idx0 ) const; ... 2
[]
で指定した要素値の参照を返します.
[]
の場合,与える事ができる引数は1つだけです.
2次元,3次元の配列を扱う場合は,
丸括弧 ()を使用します.
メンバ関数1は読み書き両用で at()
と同じ動作を,
メンバ関数2は読み取り専用で at_cs()
と同じ動作をします.
メンバ関数1を使用して値を読み書きする際, 動作モードが「自動リサイズモード」の場合,配列サイズは指定された要素番号に 従って自動的にリサイズされます. 動作モードが「手動リサイズモード」の場合,配列サイズを超えた要素へ 値を代入しても,無視されるだけでエラーとはなりません.
「手動リサイズモード」で配列サイズを超えた要素を読み取ると,
浮動小数点値の場合は NAN
が,整数値の場合は
INDEF_UCHAR
,
INDEF_INT16
,
INDEF_INT32
,
INDEF_INT64
のいずれかが返ります.
INDEF
の値については,
各型における最小の整数値が設定されています.
type &operator()( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF); ... 1 const type &operator()( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF) const; ... 2
idx0
,idx1
,idx2
で
指定された配列要素の値を設定・取得します(x,y,z
の順).
引数は3つまでとれるので,
3次元までは要素番号をそのまま引数に与えるだけですが,
4次元以上の場合は,
配列の次元を3次元に縮退させた場合の3次元目(次元番号2)の要素番
号を idx2
に設定する事で,n次元の配列を扱う事ができます.
メンバ関数1は読み書き両用で at()
と同じ動作を,
メンバ関数2は読み取り専用で at_cs()
と同じ動作をします.
この関数を使用して値を読み書きする際, 動作モードが「自動リサイズモード」の場合,配列サイズは指定された要素番号に 従って自動的にリサイズされます. 動作モードが「手動リサイズモード」の場合,配列サイズを超えた要素へ 値を代入しても,無視されるだけでエラーとはなりません.
「手動リサイズモード」で配列サイズを超えた要素を読み取ると,
浮動小数点値の場合は
NAN
が,
整数値の場合は INDEF_UCHAR
,
INDEF_INT16
,INDEF_INT32
,
INDEF_INT64
のいずれか
が返ります.INDEF
の値については,
各型における最小の整数値が設定されています.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
ssize_t size_type() const;
自身が持つ配列要素の 型を表す整数(型種別) を返します.
size_t bytes() const;
自身が持つ配列の1要素のバイト長を返します.
size_t dim_length() const;
自身が持つ配列の次元数を返します.
size_t length() const; size_t length( size_t dim_index ) const;
自身が持つ配列要素の個数を返します.引数の指定がない場合は,
全要素数(次元1の個数×次元2の個数×次元3の個数×...)を返します.
引数 dim_index
が指定された場合は,
次元番号が dim_index
の次元の
要素の個数を返します.dim_index
の開始番号は 0 です.
size_t byte_length() const; size_t byte_length( size_t dim_index ) const;
自身が持つ配列の総バイト長を返します.
dim_index
を引数に指定した場合は,
次元番号がdim_index
の次元の
総バイト長を返します.
size_t col_length() const;
自身が持つ配列の列の長さを返します.
size_t row_length() const;
自身が持つ配列の行の長さを返します.
size_t layer_length() const;
自身が持つ配列のレイヤ数を返します.1次元または2次元配列の場合は,
1 を返します.
3次元以上の場合は,配列の次元を3次元に縮退させた場合の
3次元目(次元番号2)の長さを返します.
type &at( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ); ... 1 const type &at( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const; ... 2 const type &at_cs( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const; ... 3
idx0
,idx1
,idx2
で
指定された配列要素の値を設定・取得します(x,y,z
の順).
メンバ関数1は読み書き両用で,メンバ関数2,3は読み取り専用です.
メンバ関数1を使用して値を読み書きする際, 動作モードが「自動リサイズモード」の場合,配列サイズは指定された要素番号に 従って自動的にリサイズされます. 動作モードが「手動リサイズモード」の場合,配列サイズを超えた要素へ 値を代入しても,無視されるだけでエラーとはなりません.
「手動リサイズモード」で配列サイズを超えた要素を読み取ると,
浮動小数点値の場合は
NAN
が,
整数値の場合は INDEF_UCHAR
,
INDEF_INT16
,INDEF_INT32
,
INDEF_INT64
のいずれか
が返ります.INDEF
の値については,
各型における最小の整数値が設定されています.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
double dvalue( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const;
idx0
,idx1
,idx2
で
指定された配列要素の値をdouble型に変換して返します.
配列サイズを超えた要素が指定された場合,NAN
を返します.
dcomplex dxvalue( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const;
idx0
,idx1
,idx2
で
指定された配列要素の値をdcomplex型に変換して返します.
配列サイズを超えた要素が指定された場合,NAN + NAN*I
を返します.
long lvalue( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const; long long llvalue( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const;
idx0
,idx1
,idx2
で
指定された配列要素の値を,
long型,またはlong long型に変換して返します.
自身の型が浮動小数点の場合,
デフォルトでは小数点以下は切り捨てられます.
小数点以下を四捨五入したい場合は,予め
set_rounding()
メンバ関数を使用して,
四捨五入を行う設定にします.
配列サイズを超えた要素を指定した場合,それぞれ
INDEF_LONG
,
INDEF_LLONG
が返ります.
INDEFの値については,各型における最小の整数値が設定されています.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
mdarray_type &assign( double value, ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ); mdarray_type &assign( dcomplex value, ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF );
自身の配列の,idx
n
で指定された1要素に値を設定します.
浮動小数点値を整数型の要素に代入する場合,
デフォルトでは小数点以下は切り捨てます.
小数点以下を四捨五入したい場合は,予め
set_rounding()
メンバ関数を使用して,
オブジェクトを四捨五入を行う設定にします.
動作モードが自動リサイズモードの場合,指定された要素番号に 従って配列サイズが自動的にリサイズされます.
動作モードが手動リサイズモードの場合,配列サイズを超えた要素へ
値を代入しても,無視されるだけでエラーとはなりません.
配列サイズを超えた要素へ値の代入を行うには,
予め
resize()
メンバ関数など
で配列サイズを拡張する必要があります.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
type *array_ptr(); ... 1 const type *array_ptr() const; ... 2 const type *array_ptr_cs() const; ... 3 type *array_ptr( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ); ... 4 const type *array_ptr( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const; ... 5 const type *array_ptr_cs( ssize_t idx0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const; ... 6
メンバ関数1〜3は,配列の先頭要素のアドレスを返します. メンバ関数4〜6は,配列の指定要素のアドレスを返します. メンバ関数2,3,5,6 は読み取り専用です.
引数は3つまでとれるので,
3次元までは要素番号をそのまま引数に与えるだけですが,
4次元以上の場合は,
配列の次元を3次元に縮退させた場合の3次元目(次元番号2)の要素番
号を idx2
に設定する事で,n次元の配列を扱う事ができます.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
type *const *array_ptr_2d( bool use ); ... 1 type *const *array_ptr_2d(); ... 2 const type *const *array_ptr_2d() const; ... 3 const type *const *array_ptr_2d_cs() const; ... 4
オブジェクト内部で生成された2次元配列用ポインタ配列のアドレスを 返します. 3次元以上の場合も,配列の次元を2次元に縮退させて扱います.
オブジェクトが生成された直後の状態では,内部でポインタ配列を生成する機能
は off になっています.on にするには,引数に true
を与えて
メンバ関数1を呼び出してください.逆に,false
を与えて
呼び出すと,機能が off になり,ポインタ配列のためのメモリが開放されます.
type *const *const *array_ptr_3d( bool use ); ... 1 type *const *const *array_ptr_3d(); ... 2 const type *const *const *array_ptr_3d() const; ... 3 const type *const *const *array_ptr_3d_cs() const; ... 4
オブジェクト内部で生成された3次元配列用ポインタ配列のアドレスを 返します. 4次元以上の場合も,配列の次元を3次元に縮退させて扱います.
オブジェクトが生成された直後の状態では,内部でポインタ配列を生成する機能
は off になっています.on にするには,引数に true
を与えて
メンバ関数1を呼び出してください.逆に,false
を与えて
呼び出すと,機能が off になり,ポインタ配列のためのメモリが開放されます.
ssize_t get_elements( type *dest_buf, size_t elem_size, ssize_t idx0 = 0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF ) const;
自身の配列の内容を,
dest_buf
で指定されたユーザ・バッファへコピーします.
バッファの大きさelem_size
は,要素の個数で与えます.
idx0
, idx1
, idx2
でコピー元を指定します.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
ssize_t put_elements( const type *src_buf, size_t elem_size, ssize_t idx0 = 0, ssize_t idx1 = MDARRAY_INDEF, ssize_t idx2 = MDARRAY_INDEF );
src_buf
で指定されたユーザ・バッファの内容を
自身の配列へコピーします.
バッファの大きさ
elem_size
は,要素の個数で与えます.
idx0
, idx1
, idx2
でコピー先を指定します.
引数に,MDARRAY_INDEF
を明示的に与えないでください.
void dprint( const char *msg ) const;
自身のオブジェクト情報を,標準エラー出力へ出力します. 巨大な配列を扱っている場合は,各次元の始めの部分だけを表示します. 引数 msg を指定すると,オブジェクト情報と同時に msg の内容を表示します.
ユーザ・プログラムのデバッグを目的としたメンバ関数です.
ssize_t copy( mdarray *dest ) const;
自身の全ての内容を
dest
により指定されたオブジェクトへコピーします.
型,配列長,値等全ての属性がコピーされます.
自身(コピー元) の配列は改変されません.
型と全配列長が
dest
と自身とで等しい場合は,配列用バッファの再確保は行なわれず,
既存のバッファに配列の内容がコピーされます.
「=
」演算子
や
init()メンバ関数とは異なり,常に deep copy が実行されます.
mdarray_type &cut( mdarray *dest );
自身の配列の内容を,dest
により指定されたオブジェクトへ「移管」します
(型,配列長,各種属性が指定されたオブジェクトにコピーされます).
移管の結果,自身の配列長はゼロになります.
dest
についての配列用バッファの再確保は行なわれず,自身の配列用バッファ
についての管理権限を
dest
に譲渡する実装になっており,高速に動作します.
mdarray_type &swap( mdarray &sobj );
指定されたオブジェクト
sobj
の内容と自身の内容を入れ替えます.
配列の内容,配列のサイズ,属性等すべての状態が入れ替わります.
sobj
の型は自身の型と同一である必要があります.
mdarray_type &init( bool auto_resize ); ... 1 mdarray_type &init( bool auto_resize, const size_t naxisx[], size_t ndim, bool init_buf ); ... 2 mdarray_type &init( bool auto_resize, size_t naxis0 ); ... 3 mdarray_type &init( bool auto_resize, size_t naxis0, size_t naxis1 ); ... 4 mdarray_type &init( bool auto_resize, size_t naxis0, size_t naxis1, size_t naxis2 ); ... 5 mdarray_type &init( bool auto_resize, size_t naxis0, const type vals[] ); ... 6 mdarray_type &init( bool auto_resize, size_t naxis0, size_t naxis1, const type vals[] ); ... 7 mdarray_type &init( bool auto_resize, size_t naxis0, size_t naxis1, const type *const vals[] ); ... 8 mdarray_type &init( bool auto_resize, size_t naxis0, size_t naxis1, size_t naxis2, const type vals[] ); ... 9 mdarray_type &init( bool auto_resize, size_t naxis0, size_t naxis1, size_t naxis2, const type *const *const vals[] ); ... 10 mdarray_type &init( const mdarray &obj ); ... 11
自身の配列を初期化します.
メンバ関数1〜10は,引数
auto_resize
に動作モードを与え,
その次の引数から配列のサイズ,要素の初期化のための配列のアドレスを与えます.
メンバ関数11は,obj
の配列の内容や属性等すべてを自身にコピーします.
自身の配列の型と
obj
の配列の型は一致している必要があります
(型が異なる場合は
「=
」演算子
を使用します).
obj
に許可属性が付与されていた場合
(関数によって返されたテンポラリオブジェクトの場合)は
shallow copy
が行なわれます.
bool auto_resize() const; ... 1 mdarray_type &set_auto_resize( bool tf ); ... 2
リサイズモードをで取得(メンバ関数1)・ 設定(メンバ関数2)します.
動作モードが「自動リサイズモード」の場合はtrue(=1), 動作モードが「手動リサイズモード」の場合はfalse(=0)です.
動作モードが機能するメンバ関数については, 基本機能のためのメンバ関数 および 配列の編集のためのメンバ関数 の 「動作モードサポート」のカラムをご覧ください.
bool auto_init() const; mdarray_type &set_auto_init( bool tf );
自動初期化モードを取得(メンバ関数1)・ 設定(メンバ関数2)します.
自動初期化モードが on の場合はtrue(=1), 自動初期化モードが off の場合はfalse(=0)です.
bool rounding() const; ... 1 mdarray_type &set_rounding( bool tf ); ... 2
メンバ関数2は,いくつかの高レベルメンバ関数において 浮動小数点数を整数に変換する時に, 四捨五入を行うか否を設定します. メンバ関数1でその設定を取得し,その返り値は, 四捨五入するように設定されている場合は真(true), 四捨五入しないように設定されている場合は偽(false)です.
オブジェクト生成時の初期状態では, 四捨五入しないように設定されています.
「=
」演算子
または
init()メンバ関数
を使用して,
オブジェクトのコピーを行なった場合,
四捨五入可否の属性も,コピーされます.
四捨五入の属性が機能するメンバ関数は次のとおりです:
lvalue(),llvalue()メンバ関数,
assign_default()メンバ関数,
assign()メンバ関数,
画像向きメンバ関数全般.
const char *alloc_strategy() const; ... 1 mdarray_type &set_alloc_strategy( const char *strategy ); ... 2
配列用メモリを確保する時に,どのような方法で行なうかを決定します(メンバ関数2). 次の 3 つから選択します.
"min"
... 最小限を確保.リサイズ時に必ず realloc() が呼ばれます.
"pow"
... 2のn乗で確保.
"auto"
... 自動リサイズモードの時には "pow"
,
そうでない場合は "min"
でリサイズ処理を実行します.
NULL
,他 ... 現在の方法を維持します.
メンバ関数1 は現在の設定を取得します.
type default_value() const; ... 1 mdarray_type &assign_default( type value ); ... 2
配列サイズ拡張時の初期値を取得(メンバ関数1)・設定(メンバ関数2)します. 設定された値は既存の要素には作用せず,サイズ拡張時に有効となります.
mdarray_type &resize_1d( size_t x_len );
自身が持つ配列の長さを変更し,配列長 x_len の1次元配列とします.
mdarray_type &resize_2d( size_t x_len, size_t y_len );
自身が持つ配列の長さを変更し,配列長 (x_len, y_len) の2次元配列とします.
mdarray_type &resize_3d( size_t x_len, size_t y_len, size_t z_len );
自身が持つ配列の長さを変更し,配列長 (x_len, y_len, z_len) の3次元配列とします.
mdarray_type &increase_dim()
自身が持つ配列の次元数を1つ拡張します.
mdarray_type &decrease_dim();
自身が持つ配列の次元を1つ縮小します.
mdarray_type &resize( size_t len ); ... 1 mdarray_type &resize( size_t dim_index, size_t len ); ... 2 mdarray_type &resize( const mdarray &src ); ... 3 mdarray_type &resize( const size_t naxisx[], size_t ndim, bool init_buf ); ... 4
自身が持つ配列の長さを変更します.
配列長を拡張する場合,
要素の値はデフォルト値で埋められます.
配列長を収縮する場合,len
以降の要素は削除されます.
メンバ関数1は,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2は,次元番号
dim_index
で処理対象とする次元を指定できます.
メンバ関数3は,自身の次元数と配列長を,
オブジェクト
src
が持つものと同じ大きさにします.
メンバ関数4は,自身の配列の次元数を
ndim
とし,
各次元の要素数を naxisx
に従って変更します.
新規確保した要素をデフォルト値で初期化する場合,
init_buf
に true をセットします.
mdarray_type &reallocate( const size_t naxisx[], size_t ndim, bool init_buf );
配列のバッファ内位置に調整をせずに,自身が持つ次元の大きさと配列の長さを
変更します.つまり,配列用バッファに対しては単純に realloc()
を呼ぶだけの処理を行ないます.
mdarray_type &allocate( const size_t naxisx[], size_t ndim, bool init_buf );
配列の内容を一旦破棄し,配列の長さを変更します.つまり,配列用バッファに対して free()
,malloc()
を呼ぶだけの処理を行ないます.
mdarray_type &put( type value, ssize_t idx, size_t len ); ... 1 mdarray_type &put( type value, size_t dim_index, ssize_t idx, size_t len ); ... 2
任意の1つの次元について,
要素番号 idx
から len
個の区間の要素を,
値 value
でパディングします.
idx
と len
は任意の値を取る事ができます.
「自動リサイズモード」の場合,
引数の指定に対してオブジェクト内の配列長が不足している場合は,
自動的に配列のリサイズを行ないます.
この時,追加した要素のうち値が書き込まれない部分は,
デフォルト値でパディングします.
「手動リサイズモード」の場合は,idx
,len
で指定された部分
のうち,配列サイズを越える部分については処理が行なわれません.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &swap( ssize_t idx_src, size_t len, ssize_t idx_dst ); ... 1 mdarray_type &swap( size_t dim_index, ssize_t idx_src, size_t len, ssize_t idx_dst ); ... 2
任意の1つの次元について,
要素番号 idx_src
から len
個分の要素を,
要素番号 idx_dst
から len
個分の要素と入れ替えます.
idx_dst + len
が配列サイズを超える場合は,
配列サイズまでの処理が行われます.
入れ替える領域が重なった場合,
重なっていない src
の領域に対してのみ入れ替え処理が行われます.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &move( ssize_t idx_src, size_t len, ssize_t idx_dst, bool clr ); ... 1 mdarray_type &move( size_t dim_index, ssize_t idx_src, size_t len, ssize_t idx_dst, bool clr ); ... 2
任意の1つの次元について,
配列の要素位置 idx_src
から len
個分を,
要素位置 idx_dst
へコピーします.
clr
に false
が指定された場合,コピー元の値は残り,
clr
に true
が指定された場合,
コピー元の値は残らず,デフォルト値で埋められます.
idx_dst
に既存の配列長より大きな値を設定しても,
配列サイズは変わりません.
この点が次の cpy()
メンバ関数とは異なります.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &cpy( ssize_t idx_src, size_t len, ssize_t idx_dst, bool clr ); ... 1 mdarray_type &cpy( size_t dim_index, ssize_t idx_src, size_t len, ssize_t idx_dst, bool clr ); ... 2
任意の1つの次元について,
配列の要素位置 idx_src
から len
個分を,
要素位置 idx_dst
へコピーします.
clr
に false
を指定する場合,コピー元の値は残ります.
clr
に true
を指定する場合,
コピー元の値は残らず,デフォルト値で埋められます.
idx_dst + len
が既存の配列長より大きい場合,
配列サイズは自動拡張されます.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &insert( ssize_t idx, size_t len ); ... 1 mdarray_type &insert( size_t dim_index, ssize_t idx, size_t len ); ... 2
任意の1つの次元について,
配列の要素位置 idx
に,len
個分の
要素を挿入します.
なお,挿入される要素の値はデフォルト値です.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &crop( ssize_t idx, size_t len ); ... 1 mdarray_type &crop( size_t dim_index, ssize_t idx, size_t len ); ... 2
任意の1つの次元について,
要素位置 idx
から len
個の要素だけになるよう,
不要部分を消去します.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &flip( ssize_t idx, size_t len ); mdarray_type &flip( size_t dim_index, ssize_t idx, size_t len );
任意の1つの次元について,
要素位置 idx
から len
個の部分について,
配列の並びを反転させます.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &erase( ssize_t idx, size_t len ); mdarray_type &erase( size_t dim_index, ssize_t idx, size_t len );
任意の1つの次元について,
要素位置 idx
から len
個の部分を
削除します.
削除した分,長さは短くなります.
メンバ関数1では,常に次元番号0の次元(1次元目)を処理対象とします.
メンバ関数2では,次元番号 dim_index
で処理対象とする次元を指定できます.
mdarray_type &transpose_xy();
高速なアルゴリズムにより, 自身の配列のカラムとロウとを入れ替えます.
mdarray_type &transpose_xyz2zxy()
高速なアルゴリズムにより, 自身の配列の軸 (x,y,z) を (z,x,y) へ変換します.
mdarray_type &rotate_xy( int angle )
自身の配列の (x,y) 面についての回転(90度単位)を行ないます.
左下を原点とした場合,反時計まわりで指定します.
引数 angle
には 90,-90, 180 のいずれかを指定します.
mdarray_type &reverse_endian( bool is_little_endian ); mdarray_type &reverse_endian( bool is_little_endian, size_t begin, size_t length );
内部バッファの要素位置 begin
から length
個分の部分について,
バイトオーダを必要に応じて調整します.
このメンバ関数は,自身の配列をバイナリデータとしてファイルに保存したい時,
あるいはファイルのバイナリデータを自身の配列に取り込みたい時に使います.
ファイルにデータを保存したい時は,このメンバ関数を呼び出して ファイル保存に適したバイトオーダに変換し, array_ptr() メンバ関数などで取得したアドレスをストリーム書き込み用の関数に与えて内容を書き込んだ後,再度このメンバ関数を呼び出して,バイトオーダを元に戻します.
ファイルからデータを読み込みたい時は,array_ptr() メンバ関数などで取得したアドレスをストリーム読み取り用の関数に与えて内容を読み込んだ後, このメンバ関数を呼び出して処理系に適したバイトオーダに変換します.
上記のいずれの場合も,ファイルに保存されるべきデータがビッグエンディアンならば, 第1引数に false をセットしまず(リトルエンディアンなら true です).
このメンバ関数は,処理系によって使い分けが必要とならないように作られています.
例えば,ファイルにビッグエンディアンのデータを保存したいので,
is_little_endian
に false
を指定し,
このメンバ関数を呼び出したとします.
この時,マシンがビッグエンディアンであれば,実際には反転処理は行われません
(マシンがリトルエンディアンであれば,反転処理が行われます).
次に,オブジェクト内のバイナリデータをそのままファイルに保存すれば,
指定されたバイトオーダーのバイナリファイルができます.
その後,再度同じ引数でこのメンバ関数を呼び出して,バイトオーダが反転されている場合は元に戻す処理を行います.
従って,ファイルへの保存に際しては,このメンバ関数は同じ引数で2回呼び出す事が前提です.
mdarray_type &resizef( const char *exp_fmt, ... );
自身が持つ配列の長さを変更します.長さの指定は,printf() 形式の可変長引数で
指定可能なカンマ区切りの文字列(例えば "10,5"
)によって行ないます.
指定された文字列中の要素が数字ではない場合,その次元は長さを変更しません.
例えば, ",2"
が指定された場合,最初の次元の長さは変更されません.
mdarray sectionf( const char *exp_fmt, ... ) const; mdarray vsectionf( const char *exp_fmt, va_list ap ) const;
自身の配列のうち指定された部分だけを
テンポラリオブジェクトにコピーし,それを返します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
ssize_t copyf( mdarray *dest_obj, const char *exp_fmt, ... ) const;
自身の配列の内容の一部分を,dest_obj
で指定されたオブジェクトへコピーします.
コピー先へは,配列の要素値とコピー元の型,デフォルト値,丸めフラグの属性など
すべてをコピーします.自身(コピー元) の配列は改変されません.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
dest_obj
に自身を与えた場合,trimf()を実行した場合と同じ結果になります.
mdarray_type &trimf( const char *exp_fmt, ... );
自身の配列のうち指定された部分だけを残し, 指定外の部分を消去します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &flipf( const char *exp_fmt, ... );
任意の次元(複数も可)で配列の並びを反転させます.
反転させるには,"99:0,*"
あるいは,
"-*,*"
のように,
要素番号を逆転させるか,「-*
」を書く必要があります.
("0:99,*"
のように書いても何も起こりません).
ssize_t transposef_xy_copy( mdarray *dest_obj, const char *exp_fmt, ... ) const;
自身の配列の指定された範囲について,
(x,y)のトランスポーズを行なった配列を
dest_obj
で指定されたオブジェクトに格納します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
ssize_t transposef_xyz2zxy_copy( mdarray *dest_obj, const char *exp_fmt, ... ) const;
自身の配列の指定された範囲について,
(x,y,z)→(z,x,y)のトランスポーズを行なった配列を
dest_obj
で指定されたオブジェクトに格納します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &cleanf( const char *exp_fmt, ... )
自身の配列の指定された範囲の要素を,デフォルト値でパディングします.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &fillf( double value, const char *exp_fmt, ... )
自身の配列の指定された範囲の要素を,スカラー値 value
でパディングします.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &addf( double value, const char *exp_fmt, ... );
自身の配列に,指定されたスカラー値を加算します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &subtractf( double value, const char *exp_fmt, ... );
自身の配列を,指定されたスカラー値で減算します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &multiplyf( double value, const char *exp_fmt, ... );
自身の配列に,指定されたスカラー値を乗算します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type ÷f( double value, const char *exp_fmt, ... );
自身の配列を,指定されたスカラー値で除算します.
配列要素の範囲は,exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &pastef( const mdarray &src, const char *exp_fmt, ... ); mdarray_type &vpastef( const mdarray &src, const char *exp_fmt, va_list ap );
自身の配列の指定された範囲の要素値に,src で指定されたオブジェクトの 各要素値を貼り付けます.
自身の配列要素に対する演算範囲は,
exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &addf( const mdarray &src_img, const char *exp_fmt, ... );
自身の配列に,指定されたオブジェクトの配列を加算します.
自身の配列要素に対する演算範囲は,
exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &subtractf( const mdarray &src_img, const char *exp_fmt, ... );
自身の配列を,指定されたオブジェクトの配列で減算します.
自身の配列要素に対する演算範囲は,
exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type &multiplyf( const mdarray &src_img, const char *exp_fmt, ... );
自身の配列に,指定されたオブジェクトの配列を乗算します.
自身の配列要素に対する演算範囲は,
exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray_type ÷f( const mdarray &src_img, const char *exp_fmt, ... );
自身の配列を,指定されたオブジェクトの配列で除算します.
自身の配列要素に対する演算範囲は,
exp_fmt
以降の可変引数(printf()関数の記法)で,
"0:99,*"
のように IDL や IRAF と同様の文字列で指定します.
この文字列中の要素番号は 0-indexed で,任意の次元まで指定可能です.
"[1:100,*]"
のように []
で囲まれた表記の場合は,
1-indexed として扱います.
mdarray section( ssize_t col_idx, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL ) const;
自身の配列のうち指定された部分だけを テンポラリオブジェクトにコピーし,それを返します.
引数は x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱い,
返される配列は3次元になります.
引数に,MDARRAY_ALL
を明示的に与えないでください.
ssize_t copy( mdarray *dest, ssize_t col_idx, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL ) const;
自身の内容の一部分を
dest
で指定されたオブジェクトへコピーします.
コピーされる配列要素は,引数dest
に続いて
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &trim( ssize_t col_idx, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL );
自身の配列のうち指定された部分だけを残し, 指定外の部分を消去します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &flip_cols( ssize_t col_idx=0, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL );
自身の配列の指定された範囲の要素について, その内容を水平方向に反転させます.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &flip_rows( ssize_t col_idx=0, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL );
自身の配列の指定された範囲の要素について, その内容を垂直方向に反転させます.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
ssize_t transpose_xy_copy( mdarray *dest, ssize_t col_idx=0, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL ) const;
自身の配列の指定された範囲の要素について,
(x,y)のトランスポーズを行なった配列を
dest
で指定されたオブジェクトに取得します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
ssize_t transpose_xyz2zxy_copy( mdarray *dest, ssize_t col_idx=0, size_t col_len=MDARRAY_ALL, ssize_t row_idx=0, size_t row_len=MDARRAY_ALL, ssize_t layer_idx=0, size_t layer_len=MDARRAY_ALL ) const;
自身の配列の指定された範囲の要素について,
(x,y,z)→(z,x,y)のトランスポーズを行なった配列を
dest
で指定されたオブジェクトに取得します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &clean( ssize_t col_idx = 0, size_t col_len = MDARRAY_ALL, ssize_t row_idx = 0, size_t row_len = MDARRAY_ALL, ssize_t layer_idx = 0, size_t layer_len = MDARRAY_ALL );
自身の配列の指定された範囲について, 要素をデフォルト値でパディングします.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &fill( double value, ssize_t col_idx = 0, size_t col_len = MDARRAY_ALL, ssize_t row_idx = 0, size_t row_len = MDARRAY_ALL, ssize_t layer_idx = 0, size_t layer_len = MDARRAY_ALL );
自身の配列の指定された範囲の要素を,
value
で指定された値に書き換えます.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &add( double value, ssize_t col_idx = 0, size_t col_len = MDARRAY_ALL, ssize_t row_idx = 0, size_t row_len = MDARRAY_ALL, ssize_t layer_idx = 0, size_t layer_len = MDARRAY_ALL );
自身の配列の指定された範囲の要素の値にスカラー値
value
を加算します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &subtract( double value, ssize_t col_idx = 0, size_t col_len = MDARRAY_ALL, ssize_t row_idx = 0, size_t row_len = MDARRAY_ALL, ssize_t layer_idx = 0, size_t layer_len = MDARRAY_ALL );
自身の配列の指定された範囲の要素の値からスカラー値
value
を減算します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &multiply( double value, ssize_t col_idx = 0, size_t col_len = MDARRAY_ALL, ssize_t row_idx = 0, size_t row_len = MDARRAY_ALL, ssize_t layer_idx = 0, size_t layer_len = MDARRAY_ALL );
自身の配列の指定された範囲の要素の値にスカラー値
value
を乗算します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type ÷( double value, ssize_t col_idx = 0, size_t col_len = MDARRAY_ALL, ssize_t row_idx = 0, size_t row_len = MDARRAY_ALL, ssize_t layer_idx = 0, size_t layer_len = MDARRAY_ALL );
自身の配列の指定された範囲の要素の値についてスカラー値
value
で除算します.
配列要素は,
x の範囲,y の範囲,z の範囲の順に,開始点と長さで指定します.
引数 layer_idx
,layer_len
(3次元目の指定)が与えられ,
かつ自身の配列が3次元以上の場合は,
配列の次元を3次元に縮退させたものとして扱います.
引数に,MDARRAY_ALL
を明示的に与えないでください.
mdarray_type &paste( const mdarray &src, ssize_t dest_col = 0, ssize_t dest_row = 0, ssize_t dest_layer = 0 );
自身の配列の指定された位置に,
src
で指定されたオブジェクトの各要素値を貼り付けます.
貼り付ける位置(自身の配列に対する指定)は,引数 dest_col
から順に,
x の位置,y の位置,z の位置の順に指定します.
3次元目以降は,配列の次元を3次元に縮退させたものとして扱います.
mdarray_type &add( const mdarray &src_img, ssize_t dest_col = 0, ssize_t dest_row = 0, ssize_t dest_layer = 0 );
自身の指定された配列要素に,オブジェクト
src_img
が持つ配列を加算します.
加算適用開始位置(自身の配列に対する指定)は,引数 dest_col
から順に,
x の位置,y の位置,z の位置の順に指定します.
3次元目以降は,配列の次元を3次元に縮退させたものとして扱います.
mdarray_type &subtract( const mdarray &src_img, ssize_t dest_col = 0, ssize_t dest_row = 0, ssize_t dest_layer = 0 );
自身の指定された配列要素からオブジェクト
src_img
が持つ配列の要素値を減算します.
減算適用開始位置(自身の配列に対する指定)は,引数 dest_col
から順に,
x の位置,y の位置,z の位置の順に指定します.
3次元目以降は,配列の次元を3次元に縮退させたものとして扱います.
mdarray_type &multiply( const mdarray &src_img, ssize_t dest_col = 0, ssize_t dest_row = 0, ssize_t dest_layer = 0 );
自身の指定された配列要素値にオブジェクト
src_img
が持つ配列を乗算します.
乗算適用開始位置(自身の配列に対する指定)は,引数 dest_col
から順に,
x の位置,y の位置,z の位置の順に指定します.
3次元目以降は,配列の次元を3次元に縮退させたものとして扱います.
mdarray_type ÷( const mdarray &src_img, ssize_t dest_col = 0, ssize_t dest_row = 0, ssize_t dest_layer = 0 );
自身の指定された配列要素値からオブジェクト
src_img
が持つ配列を除算します.
除算適用開始位置(自身の配列に対する指定)は,引数 dest_col
から順に,
x の位置,y の位置,z の位置の順に指定します.
3次元目以降は,配列の次元を3次元に縮退させたものとして扱います.
mdarray_type &operator=(dcomplex v); mdarray_type &operator=(double v); mdarray_type &operator=(long long v); mdarray_type &operator=(long v); mdarray_type &operator=(int v);
演算子の右側(引数)で指定した数値(スカラー値)を代入をします. 自動的なサイズ拡張は行いません.
mdarray_type &operator+=(dcomplex v); mdarray_type &operator+=(double v); mdarray_type &operator+=(long long v); mdarray_type &operator+=(long v); mdarray_type &operator+=(int v);
演算子の右側(引数)で指定したスカラー値を自身の要素すべてに対して加算します. 自身とは型が異なる引数の場合, 通常のスカラー演算の場合と同様の型変換処理が行なわれます.
mdarray_type &operator-=(dcomplex v); mdarray_type &operator-=(double v); mdarray_type &operator-=(long long v); mdarray_type &operator-=(long v); mdarray_type &operator-=(int v);
自身の要素すべてに対して, 演算子の右側(引数)で指定したスカラーで減算します. 自身とは型が異なる引数の場合, 通常のスカラー演算の場合と同様の型変換処理が行なわれます.
mdarray_type &operator*=(dcomplex v); mdarray_type &operator*=(double v); mdarray_type &operator*=(long long v); mdarray_type &operator*=(long v); mdarray_type &operator*=(int v);
演算子の右側(引数)で指定したスカラー値を自身の要素すべてに対して乗算します. 自身とは型が異なる引数の場合, 通常のスカラー演算の場合と同様の型変換処理が行なわれます.
mdarray_type &operator/=(dcomplex v); mdarray_type &operator/=(double v); mdarray_type &operator/=(long long v); mdarray_type &operator/=(long v); mdarray_type &operator/=(int v);
自身の要素すべてに対して, 演算子の右側(引数)で指定したスカラー値で 除算します. 自身とは型が異なる引数の場合, 通常のスカラー演算の場合と同様の型変換処理が行なわれます.
mdarray operator+(dcomplex v) const; mdarray operator+(fcomplex v) const; mdarray operator+(double v) const; mdarray operator+(float v) const; mdarray operator+(long long v) const; mdarray operator+(long v) const; mdarray operator+(int v) const;
演算子の右側(引数) で指定されたスカラー値を,自身の要素すべてに対して加算 した結果を格納したテンポラリオブジェクトを作成して返します. 自身とは型が異なる引数の場合,通常のスカラー演算の場合と同様の型変換処理が 行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray operator-(dcomplex v) const; mdarray operator-(fcomplex v) const; mdarray operator-(double v) const; mdarray operator-(float v) const; mdarray operator-(long long v) const; mdarray operator-(long v) const; mdarray operator-(int v) const;
演算子の右側(引数) で指定されたスカラー値を,自身の要素それぞれから減算した 結果を格納したテンポラリオブジェクトを作成して返します. 自身とは型が異なる引数の場合,通常のスカラー演算の場合と同様の型変換処理が 行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray operator*(dcomplex v) const; mdarray operator*(fcomplex v) const; mdarray operator*(double v) const; mdarray operator*(float v) const; mdarray operator*(long long v) const; mdarray operator*(long v) const; mdarray operator*(int v) const;
演算子の右側(引数) で指定されたスカラー値を, 自身の要素すべてに対して乗算した結果を格納したテンポラリオブジェクトを作成して返します. 自身とは型が異なる引数の場合,通常のスカラー演算の場合と同様の型変換処理が 行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray operator/(dcomplex v) const; mdarray operator/(fcomplex v) const; mdarray operator/(double v) const; mdarray operator/(float v) const; mdarray operator/(long long v) const; mdarray operator/(long v) const; mdarray operator/(int v) const;
演算子の右側(引数) で指定されたスカラー値を, 自身の要素それぞれから除算した結果を格納したテンポラリオブジェクトを作成して返します. 自身とは型が異なる引数の場合,通常のスカラー演算の場合と同様の型変換処理が 行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray_type &operator=(const mdarray &obj);
オブジェクトを初期化し,obj
の内容をすべて(配列長,型など) 自身にコピーします.
obj
が関数等によって返されるテンポラリオブジェクトの場合,許可されていれば
shallow copy
が行なわれます.
obj
の型が自身の型とは異なる場合,型以外のすべて(配列長や各種属性)をコピーし,
要素値のコピーは
スカラー値の「=
」演算子
と同様の規則で行なわれます.
mdarray_type &operator+=(const mdarray &obj);
演算子の右側(引数)で指定されたmdarray(継承)クラスのオブジェクトの配列を 自身に加算します. 自身とは異なる型が設定されたオブジェクトが指定された場合,通常のスカラー 演算の場合と同様の型変換処理が行なわれます.
「自動リサイズモード」が設定されている場合,各次元サイズに関して自身よりも
obj
の方が大きい場合,自動的にリサイズします.
mdarray_type &operator-=(const mdarray &obj);
演算子の右側(引数)で指定されたmdarray(継承)クラスのオブジェクトの配列を 自身から減算します. 自身とは異なる型が設定されたオブジェクトが指定された場合,通常のスカラー 演算の場合と同様の型変換処理が行なわれます.
「自動リサイズモード」が設定されている場合,各次元サイズに関して自身よりも
obj
の方が大きい場合,自動的にリサイズします.
mdarray_type &operator*=(const mdarray &obj);
演算子の右側(引数) で指定されたmdarray(継承) クラスのオブジェクトの配列を 自身に乗算します. 自身とは異なる型が設定されたオブジェクトが指定された場合,通常のスカラー 演算の場合と同様の型変換処理が行なわれます.
「自動リサイズモード」が設定されている場合,各次元サイズに関して自身よりも
obj
の方が大きい場合,自動的にリサイズします.
mdarray_type &operator/=(const mdarray &obj);
演算子の右側(引数) で指定されたmdarray(継承) クラスのオブジェクトの配列を 自身から除算します. 自身とは異なる型が設定されたオブジェクトが指定された場合,通常のスカラー 演算の場合と同様の型変換処理が行なわれます.
「自動リサイズモード」が設定されている場合,各次元サイズに関して自身よりも
obj
の方が大きい場合,自動的にリサイズします.
mdarray operator+(const mdarray &obj) const;
演算子の右側(引数) で指定された mdarray(継承)クラスのオブジェクトの配列と, 自身とを加算した結果を格納したテンポラリオブジェクトを作成して返します. 引数は,親クラスである mdarray クラスですので,自身とは異なる型が設定された オブジェクトも指定できます.その場合,通常のスカラー演算の場合と同様の型 変換処理が行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray operator-(const mdarray &obj) const;
演算子の右側(引数) で指定された mdarray(継承)クラスのオブジェクトの配列を 自身から減算した結果を格納したテンポラリオブジェクトを作成して返します. 引数は,親クラスである mdarray クラスですので,自身とは異なる型が設定された オブジェクトも指定できます.その場合,通常のスカラー演算の場合と同様の型 変換処理が行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray operator*(const mdarray &obj) const;
演算子の右側(引数) で指定された mdarray(継承)クラスのオブジェクトの配列と, 自身とを乗算した結果を格納したテンポラリオブジェクトを作成して返します. 引数は,親クラスである mdarray クラスですので,自身とは異なる型が設定された オブジェクトも指定できます.その場合,通常のスカラー演算の場合と同様の型 変換処理が行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.
mdarray operator/(const mdarray &obj) const;
演算子の右側(引数) で指定された mdarray(継承)クラスのオブジェクトの配列を, 自身から除算した結果を格納したテンポラリオブジェクトを作成して返します. 引数は,親クラスである mdarray クラスですので,自身とは異なる型が設定された オブジェクトも指定できます.その場合,通常のスカラー演算の場合と同様の型 変換処理が行なわれます.
返されるオブジェクトの動作モードや rounding 等の属性は,自身の場合と同じです.