其他分享
首页 > 其他分享> > 我如何将犰狳矩阵转换为多维数据集?

我如何将犰狳矩阵转换为多维数据集?

作者:互联网

我正在尝试重新创建以下Python numpy代码:

num_rows, num_cols = data.shape
N = 4
data = data.reshape(N, num_rows/N, num_cols)

使用Armadillo矩阵和立方体的C语言?如何才能最有效地做到这一点.我不认为直接支持从2d矩阵到3d立方体的大小调整/重塑操作吗?

解决方法:

由于犰狳使用列的主要数据排序方式(与numpy依赖于行的主要排序方式相反),因此简单地将矩阵放入具有1个切片的多维数据集并将其重塑将产生不同的结果(下面的矩阵B).另一种选择是手动构建切片:

#include <iostream>
#include <armadillo>

int main(){

    const arma::uword N = 2;
    const arma::uword num_rows = 4;
    const arma::uword num_cols = 3;

    arma::mat A(num_rows, num_cols, arma::fill::randu);

    std::cout << A;

    arma::cube B(num_rows, num_cols, 1);
    B.slice(0) = A;
    B.reshape(num_rows/N, num_cols, N);
    std::cout << B;

    arma::cube C(num_rows/N, num_cols, N);
    for(arma::uword i = 0; i < N; ++i){
        C.slice(i) = A.rows(i*N, (i+1)*N-1);
    }
    std::cout << C;


    return 0;
}

标签:armadillo,python,c-4,numpy
来源: https://codeday.me/bug/20191109/2013073.html