【发布时间】:2014-08-05 07:16:15
【问题描述】:
在 R 中,我想将矩阵对角线上方(和下方)几个条目的所有矩阵条目设置为零。下面是 N x N 矩阵的示例,其中 N = 5,我们删除了与矩阵对角线平行的 k=3 行条目:
a1 b1 c1 d1 e1 --> a1 b1 00 00 00
b2 a2 b2 c2 d2 --> b2 a2 b2 00 00
c3 b3 a3 b3 c3 --> 00 b3 a3 b3 00
d4 c4 b4 a4 b4 --> 00 00 b4 a4 b4
e5 d5 c5 b5 a5 --> 00 00 00 b5 a5
(00 means the same as 0)
对于 k=2 我们有
a1 b1 c1 d1 e1 --> a1 b1 c1 00 00
b2 a2 b2 c2 d2 --> b2 a2 b2 c2 00
c3 b3 a3 b3 c3 --> c3 b3 a3 b3 c3
d4 c4 b4 a4 b4 --> 00 c4 b4 a4 b4
e5 d5 c5 b5 a5 --> 00 00 c5 b5 a5
我已经编写了基于两个连续 for() 循环的简单函数,但是如果我处理大量小矩阵,这个函数太慢了,所有矩阵都是 N x N,N 在 400:450 范围内,k 是总是在 350:370 的范围内,所有矩阵条目都在 -1 和 1 之间(我处理相关矩阵),数据量是几 GB,所以我需要一些矢量化版本的函数。将条目设置为零或将选择的条目复制到新矩阵是否更快?
【问题讨论】:
-
@Thomas 这不是完全重复的,所以我没有标记它。这个答案非常有帮助,我以此为灵感发布了这个问题的答案。
-
@Thomas 我编辑了我的问题,添加了 N=5 和 k=3 的情况,请查看参数 k 的作用,如果可以请取消您对关闭此问题的投票
-
@Andrie 是的,我想也许你不会回答,当你给你 +1 时。关闭投票被撤回。