将块外对角线元素替换为 0

gco*_*der 3 r matrix diagonal

我正在 R 中工作,我有一个尺寸为 6n x 6n 的矩阵。我想用零替换 6x6 块对角矩阵中的所有元素。有什么建议么?

例如(仅报告 12x12 样本)

# create a sample 12x12 matrix
> mat <- matrix(1:144, nrow=12, ncol=12)
> mat
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] 
 [1,]    1   13   25   37   49   61   73   85   97   109   121   133
 [2,]    2   14   26   38   50   62   74   86   98   110   122   134
 [3,]    3   15   27   39   51   63   75   87   99   111   123   135
 [4,]    4   16   28   40   52   64   76   88  100   112   124   136
 [5,]    5   17   29   41   53   65   77   89  101   113   125   137
 [6,]    6   18   30   42   54   66   78   90  102   114   126   138
 [7,]    7   19   31   43   55   67   79   91  103   115   127   139
 [8,]    8   20   32   44   56   68   80   92  104   116   128   140
 [9,]    9   21   33   45   57   69   81   93  105   117   129   141
[10,]   10   22   34   46   58   70   82   94  106   118   130   142
[11,]   11   23   35   47   59   71   83   95  107   119   131   143
[12,]   12   24   36   48   60   72   84   96  108   120   132   144
Run Code Online (Sandbox Code Playgroud)

我想获得的是

new_mat
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] 
 [1,]    1   13   25   37   49   61    0    0    0     0     0     0  
 [2,]    2   14   26   38   50   62    0    0    0     0     0     0  
 [3,]    3   15   27   39   51   63    0    0    0     0     0     0 
 [4,]    4   16   28   40   52   64    0    0    0     0     0     0  
 [5,]    5   17   29   41   53   65    0    0    0     0     0     0  
 [6,]    6   18   30   42   54   66    0    0    0     0     0     0  
 [7,]    0    0    0    0    0    0   79   91  103   115   127   139
 [8,]    0    0    0    0    0    0   80   92  104   116   128   140
 [9,]    0    0    0    0    0    0   81   93  105   117   129   141
[10,]    0    0    0    0    0    0   82   94  106   118   130   142
[11,]    0    0    0    0    0    0   83   95  107   119   131   143
[12,]    0    0    0    0    0    0   84   96  108   120   132   144
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 5

取单位矩阵和全 1 矩阵的克罗内克乘积,然后将 mat 乘以该乘积。

mat * (diag(nrow(mat) / 6) %x% matrix(1, 6, 6))
Run Code Online (Sandbox Code Playgroud)

给予:

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
 [1,]    1   13   25   37   49   61    0    0    0     0     0     0
 [2,]    2   14   26   38   50   62    0    0    0     0     0     0
 [3,]    3   15   27   39   51   63    0    0    0     0     0     0
 [4,]    4   16   28   40   52   64    0    0    0     0     0     0
 [5,]    5   17   29   41   53   65    0    0    0     0     0     0
 [6,]    6   18   30   42   54   66    0    0    0     0     0     0
 [7,]    0    0    0    0    0    0   79   91  103   115   127   139
 [8,]    0    0    0    0    0    0   80   92  104   116   128   140
 [9,]    0    0    0    0    0    0   81   93  105   117   129   141
[10,]    0    0    0    0    0    0   82   94  106   118   130   142
[11,]    0    0    0    0    0    0   83   95  107   119   131   143
[12,]    0    0    0    0    0    0   84   96  108   120   132   144
Run Code Online (Sandbox Code Playgroud)