Как использовать Xtensor из VBA? - PullRequest
0 голосов
/ 22 февраля 2019

Просто нажмите xtensor, мне это нравится, и я постараюсь использовать его из VBA (Excel).Для простоты этого «тестирования» я планирую использовать только матрицы двойных чисел, которые передаются в C / C ++ dll как LPSAFEARRAY.

  1. Внутри dll используйте полученный LPSAFEARRAY для построения 1D-адаптера, используя указатель данных и размер (строки x столбцы).Я думаю, что этого достаточно для картографических операций.

  2. Хитрая часть в том случае, если мне нужна матрица, основная проблема заключается в том, что данные передаются в порядке фортрана (основной столбец).Я не нашел ни одного 2D-адаптера, поэтому я предполагаю, что мне нужно преобразовать вышеуказанный 1D-адаптер:

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

Является ли приведенный выше корректным или существуют более простые, более простые методы?

Есть ли какой-либо штраф в скорости при таком способе доступа к данным?

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете напрямую адаптировать одномерные массивы к контейнерам ND с нужной вам компоновкой с помощью функций адаптации:

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

См. Адаптация документации для получения более подробной информации.

...