有没有一种方法可以排除C ++数组中的行和列?

卡尔·约克托

假设我在C ++中有一个数组,如下所示:

1  2  3  4 = arr
5  6  7  8
9  9  8  9
7  6  1  3

有没有一种简洁的方法来排除任何行和/或列?

例如,假设我要对以下数组进行操作:

1  3  4
5  7  8
7  1  3

在其他编程语言中,我可以使用arr [-3,-2]轻松获得上述数组,以排除第三行和第二列。但是,我一直无法找到一种简洁的方法来排除C ++中的行和列。你会怎么做?

更新:

我想这是一个XY问题。让我告诉你为什么我要这样做。

我正在运行一个统计模型,特别是条件自回归(CAR)模型。在此高斯模型中,我们需要均值函数和协方差矩阵。

我们得到均值函数为

平均值= mu + Sig(i,-i)* inv(Sig(-i,-i))*(v(i,-i)-mu)

和协方差矩阵为

s2 = Sig(i,i)-Sig(i,-i)* inv(Sig(-i,-i))* Sig(-i,i)

因此,我需要获得矩阵Sig的三个变体:Sig(l,-l),Sig(-1,-l),Sig(-l,l)。这就是为什么我希望找到一种简单的方法来排除行和列。我通常会在R中对此进行编程,但是这花费了很长时间。因此,我希望可以在Rcpp中使用它。

下次更新:

我想我正在解决这个问题,所以谢谢评论者。这就是我的想法。我需要一个向量,该向量存储要保留在子矩阵中的索引。我计划使用Rcpp的X.submat()函数。

假设我想获得Sig的子矩阵,该子矩阵不包含第ith行和第ith列。然后,我必须有一个包含{0,1,...,(i-2),i,...,(L-1)}的索引向量,因为C ++索引从0开始。索引,我有以下代码:

// We need to get the vector of indices excluding i
  arma::vec vece = arma::zeros(L-1); // vector to exclude the ith index
  for(int k = 0; k < (L-1); k++){ // we have a vector of length L-1
    if(k < (i-1)){
      vece(k)=k;
    }
    else if(k == (i-1)){
      // do not add the ith index
    }
    else{ // k > (i-1)
      vece(k-1) = k;
    }
  }
  
  // We need to make Sig(-i,-i)
  arma::mat Sigee = arma::zeros(L-1,L-1); // ee for exclude,exclude
  Sigee = Sig.submat(vece,vece)

但是,当i = 0时,这似乎不起作用。我在以下for循环中有此代码,因此当i = 0时,我需要使用此代码。

for(int l = 0; l < L; l++){                     }
德迈尔

对我来说,似乎更简单的方法是用连续整数填充n-1长度uvec,只是跳过i,就像这样:

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>

// [[Rcpp::export]]
arma::mat exclude_one_row_and_col(const arma::mat& X, arma::uword i) {
    arma::uword n = X.n_rows; // X should be square so only need # rows
    arma::uvec idx(n-1); // vector of indices to subset by
    arma::uword ii = 0; // the integer we'll add at each elem of idx
    for ( arma::uword j = 0; j < (n-1); ++j ) { // for each elem of idx
        if ( ii == i ) { // if ii equals i, we need to skip i
            ii += 1;     // (i.e., add 1 to ii)
        }
        idx[j] = ii;     // then we store ii for this elem
        ii += 1;         // and increment ii
    }
    return X.submat(idx, idx); // finally we can subset the matrix
}

一个简单的演示显示了预期的效果:

X <- diag(1:3)
X
#      [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    0    2    0
# [3,]    0    0    3

exclude_one_row_and_col(X, 0)
#      [,1] [,2]
# [1,]    2    0
# [2,]    0    3

exclude_one_row_and_col(X, 1)
#      [,1] [,2]
# [1,]    1    0
# [2,]    0    3

exclude_one_row_and_col(X, 2)
#      [,1] [,2]
# [1,]    1    0
# [2,]    0    2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以在linq查询中参数化方法?

来自分类Dev

有没有一种方法可以在Verilog中定义类似C的结构

来自分类Dev

有没有一种方法可以使用C#中的OpenXml库固定列的宽度?

来自分类Dev

有没有一种方法可以比较数组和arraylist?

来自分类Dev

有没有一种方法可以直接从C#的磁盘中填充和使用变量?

来自分类Dev

有没有一种方法可以显示与第三列的列关系?

来自分类Dev

有没有一种方法可以在Python中禁用数组边界检查?

来自分类Dev

有没有一种方法可以同时设置对象的值和属性?

来自分类Dev

有没有一种方法可以推断出C ++中数组的单个元素的类型

来自分类Dev

有没有一种方法可以概括Action和Action <T>?

来自分类Dev

有没有一种方法可以选择单击时数组元素的索引?

来自分类Dev

有没有一种方法可以对子数组的张量进行排序?

来自分类Dev

有没有一种方法可以在计算数据帧中的异常值时排除NA,但最终输出中仍包含具有NA的行?

来自分类Dev

有没有一种方法可以添加一些用户使用c ++输入的行?

来自分类Dev

有没有一种方法可以在C#中向数组添加一些元素?

来自分类Dev

有没有一种方法可以检测c ++中的汉字?(使用升压)

来自分类Dev

有没有一种方法可以处理SQLKata中的现有查询?

来自分类Dev

有没有一种方法可以在Xamarin C#中组合网格列定义

来自分类Dev

有没有一种方法可以循环遍历plsql中的选定列

来自分类Dev

有没有一种方法可以跳过数组中的索引?

来自分类Dev

有没有一种方法可以计算C中当前进程的I / O和内存?

来自分类Dev

有没有一种方法可以引用和使用vb类中的C#库?

来自分类Dev

有没有一种方法可以在标准字段中添加和/或逻辑?

来自分类Dev

有没有一种方法可以重载协议中的方法?

来自分类Dev

有没有一种方法可以显示与第三列的列关系?

来自分类Dev

有没有一种方法可以对拆分的数组进行排序?

来自分类Dev

有没有一种方法可以在eval中调用类方法?

来自分类Dev

有没有一种方法可以推断出C ++中数组的单个元素的类型

来自分类Dev

C#:有没有一种方法可以定义未知等级的方法数组参数?

Related 相关文章

  1. 1

    有没有一种方法可以在linq查询中参数化方法?

  2. 2

    有没有一种方法可以在Verilog中定义类似C的结构

  3. 3

    有没有一种方法可以使用C#中的OpenXml库固定列的宽度?

  4. 4

    有没有一种方法可以比较数组和arraylist?

  5. 5

    有没有一种方法可以直接从C#的磁盘中填充和使用变量?

  6. 6

    有没有一种方法可以显示与第三列的列关系?

  7. 7

    有没有一种方法可以在Python中禁用数组边界检查?

  8. 8

    有没有一种方法可以同时设置对象的值和属性?

  9. 9

    有没有一种方法可以推断出C ++中数组的单个元素的类型

  10. 10

    有没有一种方法可以概括Action和Action <T>?

  11. 11

    有没有一种方法可以选择单击时数组元素的索引?

  12. 12

    有没有一种方法可以对子数组的张量进行排序?

  13. 13

    有没有一种方法可以在计算数据帧中的异常值时排除NA,但最终输出中仍包含具有NA的行?

  14. 14

    有没有一种方法可以添加一些用户使用c ++输入的行?

  15. 15

    有没有一种方法可以在C#中向数组添加一些元素?

  16. 16

    有没有一种方法可以检测c ++中的汉字?(使用升压)

  17. 17

    有没有一种方法可以处理SQLKata中的现有查询?

  18. 18

    有没有一种方法可以在Xamarin C#中组合网格列定义

  19. 19

    有没有一种方法可以循环遍历plsql中的选定列

  20. 20

    有没有一种方法可以跳过数组中的索引?

  21. 21

    有没有一种方法可以计算C中当前进程的I / O和内存?

  22. 22

    有没有一种方法可以引用和使用vb类中的C#库?

  23. 23

    有没有一种方法可以在标准字段中添加和/或逻辑?

  24. 24

    有没有一种方法可以重载协议中的方法?

  25. 25

    有没有一种方法可以显示与第三列的列关系?

  26. 26

    有没有一种方法可以对拆分的数组进行排序?

  27. 27

    有没有一种方法可以在eval中调用类方法?

  28. 28

    有没有一种方法可以推断出C ++中数组的单个元素的类型

  29. 29

    C#:有没有一种方法可以定义未知等级的方法数组参数?

热门标签

归档