从双指针在oct文件中创建NDArray

时间:2015-03-06 13:47:45

标签: c++ c pointers octave armadillo

考虑在C ++ Octave函数中创建三维数组NDArray的问题。

我从犰狳double* ptr获得了双指针int dim[3]和尺寸cube。我在Octave docs中找到了一个很有前途的NDArray constructor

NDArray::NDArray    (   
    double *    sdata,
    octave_idx_type     slen,
    octave_idx_type *   adims,
    void *      arep 
)   

我找不到任何关于参数的描述,但我做了这个猜测:sdata似乎是原始数据指针,slenadims似乎是长度和昏暗的矢量分别。但是,假设arep是什么?

1 个答案:

答案 0 :(得分:0)

dNDArray.h的

The source

// For jit support only

因此似乎无法使用。

来自the octave documentation

  

使用dim_vector定义矩阵或数组的尺寸   具有与从size返回的向量相同的特征。对于   例如:

dim_vector dv (2); dv(0) = 2; dv(1) = 3;  // 2 rows, 3 columns Matrix
a (dv);
     

这可用于所有矩阵和数组类型

但是这个构造函数已被弃用。相反,使用

NDArray a (dim_vector(dim[0], dim[1], dim[2]));

然后循环(i,j,k)索引以将立方体复制到八度数组

double* a_vec = a.fortran_vec ();
for (int i = 0; i < dim[0]; i++) {
    for (int j = 0; j < dim[1]; j++) {
        for (int k = 0; k < dim[2]; k++) {
            *a_vec++ = armadillo_cube(i, j, k);
        }
    }
}