问题标签 [boost-multi-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
16 回答
13211 浏览

c++ - Boost::multi_array 性能问题

我正在尝试使用以下测试程序将 boost::multi_array 的性能与本机动态分配的数组进行比较:

我得到以下结果:

我不敢相信 multi_arrays 慢得多。谁能发现我做错了什么?

我认为缓存不是问题,因为我正在写入内存。

编辑:这是一个调试版本。根据 Laserallan 的建议,我做了一个发布版本:

更近了。但是 16 比 1 对我来说似乎仍然很高。

好吧,没有明确的答案,但我将继续前进,暂时将我的真实代码保留为本机数组。

接受 Laserallan 的回答,因为这是我测试中最大的缺陷。

谢谢大家。

0 投票
1 回答
3073 浏览

c++ - 如何分配/复制 Boost::multi_array

我想分配一个 boost::multi_array 的副本。我怎样才能做到这一点。我想将其分配给的对象已使用默认构造函数进行了初始化。

此代码不起作用,因为尺寸和大小不一样

用什么代替m_f = f

0 投票
1 回答
614 浏览

c++ - 通过带参数的函数调用提升::multi_index 索引

我正在尝试制作一个 boost::multi_index 容器,它使用带有参数的成员函数作为键。

假设我有一个包含多个索引的这些数据项的矩形列表。矩形表示列表中的所有项目通过 get() 具有相同的属性

boost::multi_index 声明类似于

除了BOOST_MULTI_INDEX_CONST_MEM_FUNCT()没有这些特性。复合键仍然适用于成员变量。

我该如何解决这个问题?看起来我不能给 ordered_unique<> 一个 boost::function1

编辑:

经过一番思考,这是我正在尝试做的事情的要点。

boost::multi_index 在编译时确定它的索引特性。如何规避这些功能并使用运行时确定的索引?

0 投票
1 回答
2037 浏览

c++ - 如何通过引用同一个模板函数来传递一行 boost::multi_array 和 std::vector?

我对这段代码有疑问:

试图用 gcc 编译它,我得到了错误:

当我将函数的第一个参数的类型fooVec&to更改为 boost::multi_array 时,它按预期工作Vec,但是 std::vector 是按值传递的,这不是我想要的。如何在不编写两个模板的情况下实现我的目标?

0 投票
3 回答
544 浏览

c++ - boost::multi_array 调整大小异常?

我试图弄清楚 boost::multi_array 构造函数或 resize 方法是否会引发 bad_alloc 异常(或其他一些指示分配或调整大小失败的异常)。我在任何地方的文档中都找不到此信息。

澄清(从评论中添加):

这是一种科学算法,如果分配失败,它可以退回到内存密集度较低(较慢)的方法。基本上,有两个动态分配的 3 维数组来保存查询中所有基因对之间的“距离”(相关性),以及针对大量数据集中的每一个的交叉验证集中的所有基因。较慢的方法会根据需要重新计算每个距离。这是针对现有 Java 实现的 C++ 版本的,它实现了这两种方法,并且会退回到内存不足异常。我真的不希望内存不足。

0 投票
2 回答
950 浏览

c++ - Boost.MultiArray 初学者:如何获得具有动态内部数组大小的 4D 数组?

我想存储某种距离矩阵(2D),其中每个条目都有一些选择(不同的坐标)。所以我想访问距离,例如 x_alt=3 的 x=1 和 y_alt=1 的 y=3,查看带有数组 [1][3][3][1] 的 4-dim 多数组。

需要注意的重要事项如下:对于外部数组的不同值,最内部的 2 个数组/向量的大小不同。

在我计算值的第一个初始化步骤之后,不再需要修改!

使用 stl-vectors 应该很容易做到这一点:

我可以动态地迭代外部 2 维并根据需要填充内部 2 维的替代项(例如使用 push_back())。

问题:

  • Boost.MultiArray 是否可以定义这种数据结构?如何?
  • 使用 Boost.MultiArray 而不是嵌套向量是个好主意吗?性能(尤其是查找!(内存布局))?易于使用?

感谢您的任何意见!

萨沙

PS:boost 文档对我没有帮助。也许可以使用 multi_array_ref 将已经确定大小的数组放入整个 4D 结构中?

编辑: 目前我正在考虑另一种方法:将备选方案展平-> 一个更大的矩阵,其中包含备选方案之间的所有距离。然后我只需要计算每个节点的备选数量,建立前缀总和(描述矩阵位置/移位),然后可以分两步访问信息。

但我的问题仍然悬而未决。

0 投票
1 回答
2615 浏览

c++ - boost::multi_array 视图和子数组有什么区别

查看文档后,我无法弄清楚这一点。

我可以编写代码,例如

然后我可以通过类型data_2d_subarray_t或访问二维切片data_2d_view_t

它们之间有什么区别?
我可以用一个做什么而我不能用另一个做什么?
是否有任何性能差异?

非常感谢您向我澄清这一点。最好的问候,罗德里戈布。

0 投票
1 回答
457 浏览

c++ - boost::multi_index_container 编译错误,由于索引 typedef'ing 上的类型不完整

我正在使用 boost::multi_index_container (如下),并且在尝试对索引进行 typedef 时遇到编译错误:

错误详情:

尝试了使用的变体,typenametemplate我想我做得不对(因为我没有正确理解问题,无法正确解决它)。

非常感激任何的帮助。

谢谢。

PS:我正在使用'g++(GCC)4.2.4(Ubuntu 4.2.4-1ubuntu4)'和'boost-1.42'。

0 投票
1 回答
5181 浏览

c++ - 如何遍历 boost::multi_array

我一直在研究 boost::multi_array 库,以寻找一个允许您在单个 for 循环中遍历整个multi_array 的迭代器。

我认为该库中没有任何这样的迭代器。(在那里找到的迭代器允许您遍历 multi_array 的单个维度)

我错了吗?
如果没有,是否有任何库定义了这样的迭代器?

进入细节,我想写一些类似的东西:

并获得一个重复 3x4x2 次的循环

0 投票
1 回答
254 浏览

c++ - 使用 boost multi_array 实例化结构

我有一个扩展抽象类的结构,然后我在里面添加了一个 boost multi_array 作为变量,我收到以下错误。

错误:不能将变量“ mrs”声明为抽象类型,因为以下虚函数是纯的zi::concurrency::runnable