gpt4 book ai didi

python - 如何将 Armadillo 矩阵转换为立方体?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:34 27 4
gpt4 key购买 nike

我正在尝试重新创建以下 Python numpy 代码:

num_rows, num_cols = data.shape
N = 4
data = data.reshape(N, num_rows/N, num_cols)

在 C++ 中使用 Armadillo 矩阵和立方体?如何最有效地做到这一点。我不认为调整大小/整形操作直接支持从 2d 矩阵移动到 3d 立方体?

最佳答案

构造这样一个立方体的最快方法是使用 advanced constructors 之一.这些允许您直接从内存的任意部分创建一个新对象,甚至无需复制任何数据。这在本质上最接近 NumPy reshape 的方式,即返回原始数据的 View ,而不是拷贝。

你会像这样使用构造函数:

// Assuming a is an arma::mat.
int N = 4;
arma::cube c(a.memptr(), N, a.n_rows / N, a.n_cols, false);

这直接从 a 中获取内存,没有复制,并将其用作 c 的数据。

当然,这很快,但很危险。只要 c 存在,您就有责任保证指向的内存有效。这意味着 c 的生命周期必须严格嵌套在 a 的生命周期中。这可能很难确保,尤其是当 ac 都在堆上创建时。

您还可以允许 c 复制 a 的数据,方法是省略最后一个参数或将其设置为 true 。这比无复制构造函数花费更多时间,但可能比从 a 的数据分配每个切片要少,因为此构造函数对基础数据执行单个批量 memcpy .

所有这些都取决于@ewcz 的回答提出的行与列主要观点。确保您知道 reshape 时会得到什么,尤其是在您使用高级构造函数时。

关于python - 如何将 Armadillo 矩阵转换为立方体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com