【发布时间】:2014-07-23 14:16:23
【问题描述】:
我确实有 2 个向量,我想构建一个基于 r 和 c 的矩阵
r =
1
2
4
6
8
c =
2
4
6
8
10
我想构造一个矩阵 A 使得 A(1,2)=A(2,4)=A(4,6)=A(6,8)=A(8,10)=1 其他元素0.
请帮忙
【问题讨论】:
我确实有 2 个向量,我想构建一个基于 r 和 c 的矩阵
r =
1
2
4
6
8
c =
2
4
6
8
10
我想构造一个矩阵 A 使得 A(1,2)=A(2,4)=A(4,6)=A(6,8)=A(8,10)=1 其他元素0.
请帮忙
【问题讨论】:
您可以将构造函数用于稀疏矩阵:
full(sparse(r,c,1))
顺便说一句,如果您想将其应用于具有许多零的大型矩阵,请使用稀疏矩阵。对于有很多零的矩阵,它使用的内存要少得多:
sparse(r,c,1)
【讨论】:
您可以使用linear indexing 来完成此操作。
首先,构造一个由零组成的矩阵:
A = zeros(max(r),max(c));
然后将元素设置为1:
A( size(A,1) * (c-1) + r ) = 1;
【讨论】:
10 可以替换为 size(A,1) 以使这个更通用。
10s 都应该替换为max(r),实际上第一个应该像 Luis Mendo 那样预先分配。不过很好的解决方案!
首先将A 预分配给适当大小的零矩阵(由r 和c 中的最大值给出)。然后,要处理所需的条目,您需要转换为 linear indexing,您可以使用 sub2ind 轻松完成:
A = zeros(max(r),max(c));
A(sub2ind(size(A),r,c)) = 1;
【讨论】: