在 Armadillo/C++ 中与矩阵的非连续子集共享内存

问题描述

嗨,以下是可能的,如果是,有什么关于如何去做的提示吗?

这是我想要实现的虚拟版本:定义三个矩阵 A、B 和 C,其中 A_xy 标准正态分布,B_xy = A_xy 用于 A_xy > 0 和 0 否则。同样,C_xy = A_xy 对于 A_xy

为了避免复制操作,我想构造 B 和 C,以使非零元素与 A 共享内存。这可能吗?!如果我以稀疏矩阵格式构造 B 和 C,那么我不需要担心不会共享内存的额外零,但这最终可能会变慢,具体取决于 B 和 C 的稀疏性...

在下面的 B 和 C 显然不与 A 共享内存,但应该给出我想要做什么的想法:

  setState((initialState) => ({
    ...initialState,lastHole: -1,initGame: false
  }))

作为输出给出:

arma_rng::set_seed(1);
mat A;
A.randn(4,4);
uvec indB = find(A > 0);
uvec indC = find(A <= 0);

// Copy construction
mat B,C;
B.zeros(4,4);
B.elem(indB) = A.elem(indB);
C.zeros(4,4);
C.elem(indC) = A.elem(indC);

A.print("A");
B.print("B");
C.print("C");

我想到的是:

A
  -0.3868  -0.7951   0.1175  -1.5241
  -0.0394  -0.0546  -0.8588  -0.4954
   0.6868   1.9379  -0.6483   0.9138
  -0.2489   1.0010   0.6746  -0.6272
B
        0        0   0.1175        0
        0        0        0        0
   0.6868   1.9379        0   0.9138
        0   1.0010   0.6746        0
C
  -0.3868  -0.7951        0  -1.5241
  -0.0394  -0.0546  -0.8588  -0.4954
        0        0  -0.6483        0
  -0.2489        0        0  -0.6272

哪个给了

// Auxiliary memory construction
mat B2(vec (A.elem(indB)).memptr(),A.n_rows,A.n_cols,false,true);
B2.print("B2");

不是我想要的,但希望你能明白!

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...