如何有效地仅选择三角矩阵的某些列

时间:2017-01-26 22:14:13

标签: matlab matrix

我有以下问题:

我需要一些巨大的三角形1-0矩阵的列。

E.g。

Matrix =

1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1

Index = 

[1 4]

Result =

1 0
1 0
1 0
1 1

我认为最简单的方法是:

index = [10 20 300] %arbitrary index
buf = tril(ones(60000,60000))
matr = buf(:,index)

然而,这不起作用,因为缓冲矩阵太大并导致MATLAB抛出错误。因此,这种方法被阻止了。

如何有效地解决这个问题? (例如,通过循环遍历索引数组并连接自制行,这将是微不足道的,但这将是缓慢的,我希望更快的方法)

索引数组不会大于可用列的1/10。

1 个答案:

答案 0 :(得分:2)

如果矩阵包含主对角线及其下方的矩阵,否则为零,您可以按如下方式进行,而不实际生成矩阵:

N = 10; % number of rows of (implicit) matrix
Index = [1 4]; % column indices
Result = bsxfun(@ge, (1:N).', Index);