我有以下问题:
我需要一些巨大的三角形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。
答案 0 :(得分:2)
如果矩阵包含主对角线及其下方的矩阵,否则为零,您可以按如下方式进行,而不实际生成矩阵:
N = 10; % number of rows of (implicit) matrix
Index = [1 4]; % column indices
Result = bsxfun(@ge, (1:N).', Index);