问题标签 [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.
c++ - 遍历 boost::multi_array 视图
我想了解如何使用 boost::multi_array 提供的视图功能。具体来说,我希望能够在单个循环中迭代表示初始矩阵的特定子矩阵(不一定是连续的)的视图的所有元素。似乎提供的迭代器不会做我想要的(或任何事情,它不会编译)。
在下面的例子中,我有一个 2x6 矩阵,我想得到它的 2x4 子矩阵,所以如果我尝试打印它,我希望得到“BoosLion”。事实上,如果我对每个维度进行迭代,情况就是如此。但是当我尝试使用单个迭代器进行迭代时,程序将无法编译。
有谁知道如何只用一个循环进行迭代?我尝试搜索文档,但找不到任何相关内容。另外,如果有人知道可以做到这一点的另一个图书馆,请告诉我,谢谢!
c++ - 使用 sort 函数和递归比较器对 boost 的 multi_array 进行排序
我在 C++ 中处理大数据和程序。例如,我需要创建大小为 [7 x 128^3 x 5 x 5] 等的 4 维数组。我将不得不创建更多的数组作为不同属性的中间数据结构。研究了很多,最终选择了boost的multi_array来实现我的数据结构。我选择 multi_array 有两个原因:(1)它处理异常,例如数组索引越界,这对我的调试非常重要。(2)它处理更高维度的数组(其他选项,如 stl 的多维数组对 3 维和更高维度的数组有很多问题)
问题示例。
如果我用一个例子来解释这个问题就变得容易了。说,我有以下 3-D 数组。
我想以这样一种方式对这些行进行排序,即必须根据 column_1、column_2 和 column_3 进行排序。排序后我会有
您会看到 column_1 已排序。对于具有相同 column_1 的每两行,对 column_2 进行排序,依此类推。
我已经尝试过。
我能够使用普通的 3-D 数组并编写递归比较器并调用库的排序函数(使用比较器)来解决这个问题。但是,在我更改为 boost 的 multi_array 后,我一直无法解决问题。我搜索了很多提升文档,但找不到任何解决方案。我不知道如何编写一个递归比较器来对 boost multi_array 进行排序。
问题。
有人可以给我用于提升 multi_array 的递归比较器的确切工作语法来对 multi_array 进行排序吗?代码不得使用依赖于特定编译器/操作系统的 API。假设 multi_array A 的维度为 n1 x n2 x ... x nd。
谢谢。
回复雅克。
递归比较器是这样的:
使用递归比较器的排序函数是这样的:
多维数组是这样的:
我没有包括每个参数代表什么的许多其他细节,因为它变得混乱(因为它试图做许多其他事情),但核心思想如示例中所述。
我想要做的是为 multi_array 编写一个递归比较器,如下所示。
我不能像 compareByID 这样简单地编写比较器,因为当对象是 multi_array 时,我不知道如何将参数传递给比较器函数。
这有帮助吗?
回复sehe。
优秀的解决方案。万分感谢。看来您是使用 boost 和 c++ 的天才。它完全奏效了。您用于交换和比较器功能的想法非常棒。我不知道这些函数调用(例如 lexicographical_compare() 等)甚至存在。太感谢了。
我有两个相关的问题:
(1) 假设,我们对所有维度的 multi_array A 进行排序。我们想对 multi_array B 应用相同的交换/交换/转换。我们可以按照您给出的想法来做吗?
我知道我们可以通过编写一个单独的自定义排序器来解决这个问题(当我们交换时,我们可以交换 A 和 B 中的组件)。但是我很好奇这个问题是否可以用比较器的概念来解决,因为当我们使用它对A进行排序时,比较器对multi_array B一无所知。如何解决这个问题?
(2) 我们真的有必要在 my_comp 中有几个重载函数吗?我们不能为此目的拥有一个完全通用的功能吗?(抱歉,我是 multi_array、sub_array 概念的新手)。
c++ - 如何在运行时构造一个 multi_array::index_gen
在下面的代码中,该ExtractSubArray
函数是完全通用的,而在ExtractSubArrayCornerAndExtent
编写代码时需要了解维数(以构造 RangeType 参数的序列)。有没有办法编写一个通用的ExtractSubArrayCornerAndExtent
(没有 SFINAE 为每个维度使用不同的函数(这会很烦人,并且需要一组固定的可能维度)。
c++ - boost::multi_array 内存管理和作用域
我正在使用 boost::multi_array 来存储一些数据。我使用视图对数据进行所有工作,因为我需要处理不同维度的数据切片。
我的问题是, boost::multi_array 的内存是如何管理的?
特别是,我想使用我的数据切片(视图)的副本。因此我想做这样的事情:
我想知道这是否是错误的,因为当复制函数返回时,包含副本的 multi_array 超出了范围。或者它可以因为 multi_array 使用智能指针或引用计数来跟踪?
c++ - 在同一函数中使用 boost multi_array 及其视图
multi_array 视图有许多与 multi_array 相同的方法。他们有一个共同的基础,我可以通过参考使用吗?
c++ - 没有深拷贝的 multi_array_view 分配?
如何重新分配 boost multi_array_view 以指向 multi_array 的不同部分?我不想要深拷贝。
升压源:
更新:我最终更改了程序中的方法,以保留对由boost::indices[...]
. 然后我可以随时使用该对象创建一个新对象array_view
。
c++ - 箭头运算符和提升多数组迭代器
boost多数组迭代器中是否缺少箭头运算符?我期望这行得通是错的吗?
c++ - 您可以使用不同大小的 boost::multi_arrays 调用函数吗?
我正在尝试构建一个将多维数组写入文件系统的函数。为了保持紧凑,我只想为不同大小的 multi_arrays 创建一个函数。
有没有这样的事情boost::multi_array_base_type
或有其他方法可以做到这一点?
c++ - 提升多数组typedef无法识别c ++
我对 C++ 很陌生,但工作很努力。我在一个项目中使用 boost::multi_array 库,但我遇到了 typedef 问题。
然后我在另一个标题中使用 array_type 和 array_type int :
它是 cpp 文件:
然后我得到这个我无法理解的错误,因为我的 typedef 对两个文件都是通用的
谢谢您的帮助!
c++ - 从初始化列表中填充 boost::multi_array 的最佳方法是什么?
我想在一些代码中初始化一个 boost::multi_array 内联。但我不认为 boost::multi_array 支持从初始化列表进行初始化。这是我到目前为止所拥有的:
我喜欢我可以使用花括号初始化器列表紧凑地表达矩阵内容。但我不喜欢“memcpy”,也不喜欢使用一次性原始数组。有没有更好的方法从代码中可读的内联值集填充我的 boost::multi_array ?