首页 > 解决方案 > 使用犰狳做 `Q.slice(a).col(b)` 的更有效方法

问题描述

有没有比犰狳从立方体中提取列更有效的方法Q.slice(a).col(b)

类似于tube,但对于最后 2 个维度而不是前 2 个维度。

标签: c++armadillo

解决方案


获取指向所需切片的所需列的第一个元素的指针。然后将该指针传递给vec 类的高级构造函数之一。例子:

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将使用未分配的内存或来自不同对象的内存。在第一种情况下,它可能会导致段错误。在第二种情况下,它是信息泄漏。

如果C是 a const cube,则使用const_castconst从获得的指针中剥离。同样,这也不安全。


推荐阅读