Более эффективный способ сделать `Q.slice (a) .col (b)`, используя Armadillo - PullRequest
2 голосов
/ 15 марта 2020

Есть ли более эффективный способ извлечь столбец из куба в броненосце, чем Q.slice(a).col(b)?

Что-то вроде tube, но для двух последних измерений вместо первых 2.

1 Ответ

1 голос
/ 16 марта 2020

Получить указатель на первый элемент нужного столбца желаемого среза. Затем передайте этот указатель одному из расширенных конструкторов класса ve c . Пример:

cube C(6, 5, 4, fill::randu); // cube with 4 slices

vec v1 = C.slice(2).col(3);  // normal way of extracting a vector

vec v2( &C(0,3,2), C.n_rows, false, false);  // alternative way

Обратите внимание, что хотя это работает, это небезопасно. Если C изменяется или удаляется, v2 будет использовать нераспределенную память или память другого объекта. В первом случае это может привести к segfault. Во втором случае это утечка информации.

Если C - это const cube, используйте const_cast , чтобы убрать const из полученного указателя. Опять же, это не безопасно.

...