アットウィキロゴ

valarray

コンストラクタ


valarray<float> a(1.0f, 10); //< 10個の1.0f

float b[] = {1.0f, 2.0f, 3.0f, 4.0f};
valarray<float> a(b, sizeof(b[0])/sizeof(b)); //< 配列で指定

部分要素アクセス


slice(start, length, stride)


int b[] = (1, 2, 3, 4, 5, 6};
valarray<int> a(b, sizeof(b[0])/sizeof(b));
valarray<int> c(a[slice(0, 3, 2])); //< 0番目から3つ2個おきに
//< 結果 : c == {1, 3, 5}

gslice(start, length, stride)


//< 部分要素を取り出す為に必要な情報を作る
size_t len[] = {2, 2}; //< 取り出すサイズ、縦2, 横2の長さ(==2x2)
valarray<size_t> length(len, sizeof(len[0])/sizeof(len));
size_t st[] = {3, 1}; //< 元のvalarray(==3x3)のストライド。縦に行くと3増え, 横に行くと1増える
valarray<size_t> stride(st, sizeof(st[0])/sizeof(st));

//< 実際に取り出す部分
float b[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f};
valarray<float> a(b, sizeof(b[0])/sizeof(b)); //< 元のvalarray(==3x3)を作る
valarray<float> c(a[gslice(0, length, stride)]); //< 2x2部分要素を取り出す
//< a == {1.0f, 2.0f, 3.0f,
//<       4.0f, 5.0f, 6.0f,
//<       7.0f, 8.0f, 9.0f};
//< 結果 : c == {1.0f, 2.0f,
//<           4.0f, 5.0f};

mask


int b[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
valarray<int> a(b, sizeof(b[0])/sizeof(b));
bool m[] = {true, flase, true, false, true, false, true, true, true}; //< trueの箇所だけを取り出す
valarray<bool> mask(m, sizeof(m[0])/sizeof(m));
valarray<int> c(a[mask]);
//< 結果 : c == {1, 3, 5, 7, 8, 9};

int b[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
valarray<int> a(b, sizeof(b[0])/sizeof(b));
size_t m[]={0, 2, 4, 6};
valarray<size_t> mask(m, sizeof(m[0])/sizeof(m));
valarray<int> c(a[mask]);
//< 結果 : c == {1, 3, 5, 7};
最終更新:2007年07月23日 21:00