2

只需点击 xtensor,我喜欢它,我会尝试从 vba(excel)中使用它。为了保持这个“测试”简单,我打算只使用双精度矩阵,它们作为 LPSAFEARRAY 传递给 C/C++ dll。

  1. 在 dll 中,使用接收到的 LPSAFEARRAY 构建一维适配器,使用数据指针和大小(行 x 列)。我认为这对于映射操作来说已经足够了。

  2. 棘手的部分是如果我需要矩阵,主要问题是数据以 fortran(列优先)顺序传输。我没有找到任何 2D 适配器,所以我的猜测是我必须改造上面的 1D 适配器:

    a) reshape it, to (columns, rows)
    
    b) transposed view of a)
    

以上是正确的,还是有更简单、更直接的方法?

这种访问数据的方法是否存在速度损失?

4

1 回答 1

0

您可以通过调整函数将一维数组直接调整到具有您需要的布局的 ND 容器:

double* data = get_data_buffer();
auto adapter = xt::adapt<xt::layout_type::column_major>(data, {rows, columns});

有关更多详细信息,请参阅改编文档

于 2019-03-04T00:59:34.387 回答