犰狳C++:- 有效访问立方体结构中的柱子
Armadillo C++:- Efficient access of columns in a cube structure
使用犰狳矩阵库,我知道访问二维矩阵中的列的有效方法是通过简单地调用.col(i)。
我想知道是否有一种有效的方法来提取存储在"多维数据集"中的列,而无需首先调用切片命令?
我需要最有效的方法来访问存储在中的数据,例如(使用 matlab 符号)A(:,i,j)。我将在一个非常大的数据集上做数百万次,所以速度和效率是重中之重。
我想你想要
B = A.subcube( span:all, span(i), span(j) );
或等效
B = A.subcube( span(), span(i), span(j) );
其中B
将是与A
类型相同的行或列向量(例如,默认包含double
,或许多其他可用类型)。
.slice() 应该很快。它只是提供对基础 Mat 类的引用。您可以尝试以下操作:
cube C(4,3,2);
double* mem = C.slice(1).colptr(2);
另外,请记住,犰狳默认启用范围检查。 如果要避免范围检查,请使用 .at() 元素访问器:
cube C(4,3,2);
C.at(3,2,1) = 456;
或者,您可以将矩阵存储在字段类中:
field<mat> F(100);
F(0).ones(12,34);
对应的元素访问:
F(0)(1,2); // with range checks
F.at(0).at(1,2); // without range checks
您还可以使用定义的ARMA_NO_DEBUG编译代码,这将删除所有运行时调试(例如范围检查)。这将给你一个加速,但只有在你调试了所有代码(即验证你的算法是否正常工作)之后,才建议这样做。调试检查在发现错误时非常有用。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- Armadillo C :如何使用来自另一个矩阵的多个元素(特别是在立方体结构中)修改矩阵的多个数组元素
- OpenGL 立方体结构
- 犰狳C++:- 有效访问立方体结构中的柱子