问题标签 [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++ - 初始化 const boost multi_array
我有几个 64 位整数的大型数组,它们的值计算起来很昂贵,所以我目前在我的构建系统中有生成器代码,用于计算常量并生成 .cpp 文件来初始化数组。其中一些是 1d,但其中许多是 2d。以前,我的生成器脚本已这样声明它们(值由我的生成器代码计算)
但我想在没有 C 类数组的情况下使用更多的 C++ 来完成它。(其中一些比这更大,大小为 [4096][64])。对于一维数组,我可以只使用 std::array。对于二维的,出于性能原因,我不想使用嵌套的 std::arrays,而是宁愿使用 boost multi_array。
如何定义 const boost multi_array?我试过这个:
其中 makeMultiArray 是生成数组的辅助函数,而 bitboard 是 uint64_t 的 typedef。(这个辅助函数需要一个平面初始化列表)这可以编译,但是当我运行它时,数组是空的。我知道为什么它是空的,而且事后很明显:makeMultiArray 没有运行,但我想不出另一种方法来做我想做的事,而不使用 C 之类的数组或嵌套的 std::arrays。
有没有办法用 constexpr 或其他东西来做到这一点,或者有更好的方法完全不使用我的生成器代码。
编辑:这些是在 .cpp 文件的命名空间范围内声明的。
编辑 2下面的评论者现在怀疑存在链接问题,而不是我最初怀疑的问题,我现在同意。我用上面的 makeMultiArray 函数尝试了一个最小的工作示例,它确实有效,所以问题出在其他地方。我在上面添加了命名空间的名称。此外,头文件中的声明如下:
这是file2.cpp
两个单独的 cpp 文件中的定义是否会导致我的问题?
boost-multi-array - 如何获取 boost multi_array 的视图并将其分配回相同的 boost multi_array?
我有一个名为 DataView 的函数,它执行“切片”(创建 array_view),如下所示:
...其中 _Data 是 Array2D (boost::multi_array) 类型的私有成员,其中包含 MyArray 的数据部分。切片(视图创建)没有问题,如下所示:
当我想将新获取的视图 (array_view) 分配回原始的 multi_array (my_array) 时,就会出现问题。我试图通过在 MyArray 类上创建这个函数来做到这一点:
...并使用这行代码调用函数...
构建成功时,我的应用程序产生以下错误:
我真正需要的是一个简单的示例,说明如何执行以下操作之一:
- 使用我当前的策略,从我的原始 multi_array 创建一个 array_view 并将新视图分配回原始数组,或者
- 对原始的 multi_array 进行切片(就地)。我已经寻找了这个解决方案的一个例子,但似乎找不到它。
谢谢你。
c++ - 添加 2D 水平对齐和 2D 垂直对齐的 boost::multi_array 生成 3D 数组的最有效(时间、内存)方法是什么?
我想在 C++ 中添加两个 boost 多数组。
- 第一个挑战是两个阵列的对齐。这些阵列中的一个是垂直对齐的,另一个是水平对齐的,如下图所示。应将它们相加,形成一个 3 维数组(另见下文)。最简单/最懒惰的方法是沿其 y 轴复制垂直对齐的数组,直到它具有与水平对齐的数组相同的宽度。此外,沿其 x 轴复制水平对齐的阵列,直到它与垂直对齐的阵列具有相同的高度。然后我需要添加两个 3 维提升多阵列的可能性。
- 第二个挑战是,boost 本身不支持添加 boost 多阵列,或者我在这一点上错了?我想避免for循环并利用直接分配的内存,这使得例如复制操作的时间密集度降低。
有没有人有一个很好的建议来处理这个任务?
c++ - 如何从 2d Boost.MultiArray 中获取子数组?
我正在开发一个需要使用 2d Boost.MultiArray 的程序。我设法初始化它并用数据填充它。但我不明白如何获取 size 的子数组i
,j
如果 multiarray 是 size m
,n
。哪里i<=m
和j<=n
。谁能帮我?
代码:
c++ - 如何通过 Boost.MPI 发送 2d Boost.MultiArray 的子数组?
我需要使用 Boost.MPI 发送对 Boost.MultiArray 的 2d 子数组的引用。现在我有以下代码:
但我也有以下错误试图执行它:
谁能帮我把它发送到另一个进程?
c++ - 将选定值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
如何将选定范围(视图)从 boost::multi_array 复制(深度复制)到另一个数组?
c++ - 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?
如何在两个 boost::multi_arrays 之间执行数学运算?
添加两个值类型为 double 的数组的示例:
我知道的一种可能性是英特尔 IPP 库。添加两个矩阵可以用 eg 来完成ippiAdd_
。但不幸的是,英特尔 IPP 不支持双值相加。
那么有人知道英特尔 IPP 之外的另一个库,分别是克服英特尔 IPP 中受限值类型缺点的解决方案吗?
c++ - boost::multi_array_ref 与 boost::multi_array&
有理由更喜欢使用boost::multi_array_ref
overboost::multi_array&
吗?为什么boost::multi_array_ref
boost完全提供了适配器类?
c++ - 在 boost::multi_array 中跨维度执行操作?
在将一些 MATLAB 代码转换为 C++ 的过程中,我试图以boost::multi_array
各种方式操作 a 的内容。维度的数量可以保持不变,但维度的大小在第二次操作中会发生变化(沿维度求和)。我已经检查了几个参考资料(例如 这些) , 但它们专注于打印输出而不是改变值,所以我想不出一个完成这项工作的好方法。在所有情况下,应将原始文件替换为操纵的.multi_array
multi_array
对于以下两种操作,我尝试了多种方法。我可以使用 4 深的嵌套循环强制它工作,但它的速度非常慢,而且看起来也很痛苦。似乎使用某种方式boost::multi_array<double, 4>::array_view<3>::type
来获取我想要操作的维度应该可以工作,但是编译器不接受我尝试对 array_view 的元素执行的任何操作。
那么在 C++ 中快速执行这些操作的最佳方法是什么?
操作 #1:沿维度乘以向量
操作#2:沿一个维度对矩阵求和
c++ - 如何将指向 boost::multi_array 中元素的指针转换为其索引?
在我的程序中,我使用 boost::multi_array ,有时将指向容器内元素的指针转换为其索引很重要,例如,检查该元素是否在任何维度上都不在数组的边界上。这是过度简化的代码,只是为了解释其含义:
boost::multi_array 中是否有任何内置的有效方法用于指针到索引的转换?或者唯一的可能性是手动分割相对于数据开始的偏移量?