При использовании кубических массивов (3D) броненосца у меня возникают трудности с использованием функций col () или row ().Они прекрасно работают с произвольной 2D-матрицей (например, A.col (0)), а связанные функции cols () и row () работают, как и ожидалось, с массивами кубов (например, Q.cols (0,1);см. ниже), но row () и col (), похоже, не работают для этого типа данных.Вот минимальный рабочий пример с выводом, включенным в качестве комментариев:
#include <iostream>
#include <armadillo>
int main() {
arma::Cube<double> Q(2,2,2,arma::fill::randu);
Q.print();
// [cube slice 0]
// 0.7868 0.7107
// 0.2505 0.9467
// [cube slice 1]
// 0.0193 0.2513
// 0.4049 0.0227
// The rows() and cols() function work fine to give me row- and columnwise access:
Q.rows(0,0).print();
// [cube slice 0]
// 0.7868 0.7107
// [cube slice 1]
// 0.0193 0.2513
Q.cols(0,0).print();
// [cube slice 0]
// 0.7868
// 0.2505
// [cube slice 1]
// 0.0193
// 0.4049
// So far so good. I assumed row() and col() functions would
// simply access single rows or columns, respectively, through
// the slices. But this is not the case. If I try to access
// the row() or col() functions via .print(), a core dump ensues.
// If I examine the size of these objects, they are either
// empty or extremely large.
std::cout << size(Q.row(0)) << std::endl;
// 0x0x0
std::cout << size(Q.col(0)) << std::endl;
// 0x0x18446744073709551615
return 0;
}
Это указывает на то, что я неправильно использую эти функции (по крайней мере, на Cube объектах), хотя документация показывает Q.row (row_number) и Q.col (col_number), которые будут использоваться таким образом.Однако, как упоминалось выше, доступ к .row () или .col () с использованием 2D матрицы работает, как и ожидалось.
Может кто-нибудь сказать мне, в чем проблема?