我有一个向量y = [1; 1; 2; 3]
和一个矩阵Y = zeros(4, 3)
。
我需要将1
中与向量Y
的值相对应的列设置为y
。即
Y = [1, 0, 0; 1, 0, 0; 0, 1, 0; 0, 0, 1]
Y(y)或Y(:, y)不能给我我需要的结果!
有什么想法我可以实现吗?
答案 0 :(得分:2)
您需要将这些列索引转换为线性索引。您可以这样操作:
octave:1> A = zeros (4, 3);
octave:2> c_sub = [1, 1, 2, 3];
octave:3> ind = sub2ind (size (A), 1:rows(A), c_sub)
ind =
1 2 7 12
octave:4> A(ind) = 1
A =
1 0 0
1 0 0
0 1 0
0 0 1
但是,如果您的矩阵是稀疏矩阵,请创建一个适当的稀疏矩阵:
octave:4> sparse (1:4, c_sub, 1, 4, 3)
ans =
Compressed Column Sparse (rows = 4, cols = 3, nnz = 4 [33%])
(1, 1) -> 1
(2, 1) -> 1
(3, 2) -> 1
(4, 3) -> 1
并考虑使用逻辑矩阵(使用false
代替zeros
,而使用true
代替1
。