我有一个 m 维度的整数向量,范围从1到 n 。这些整数是 m×n 矩阵的列索引。
我想创建一个0和1的 m×n 矩阵,其中在 m -th行中,指定的列中有一个1 m - 我的载体中的值。
示例:
% my vector (3-dimensional, values from 1 to 4):
v = [4;
1;
2];
% corresponding 3 × 4 matrix
M = [0 0 0 1;
1 0 0 0;
0 1 0 0];
这可能没有for循环吗?
答案 0 :(得分:4)
当然,这就是他们发明sparse矩阵的原因:
>> M = sparse(1:length(v),v,ones(length(v),1))
M =
(2,1) 1
(3,2) 1
(1,4) 1
如果需要,可以使用full转换为完整矩阵:
>> full(M)
ans =
0 0 0 1
1 0 0 0
0 1 0 0
答案 1 :(得分:3)
或者没有稀疏矩阵:
>> M = zeros(max(v),length(v));
>> M(v'+[0:size(M,2)-1]*size(M,1)) = 1;
>> M = M'
M =
0 0 0 1
1 0 0 0
0 1 0 0
使用转置因为matlab数组由列
处理答案 2 :(得分:3)
在Octave中,至少从3.6.3开始,您可以使用广播轻松完成此操作:
M = v==1:4