我有a
矩阵
a =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
和b
向量
b =
1 2 3 4 5 5
我想用a
矩阵值的参考值替换b
矩阵中每一行的值,最后生成一个矩阵,如下所示,而不使用for循环。
a_new =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
0 0 0 0 1
如果b, b(1) = 1
的第一个元素如此更改,则取a
向量的第一行,并将第一个元素设为1,因为b(1) = 1
。
如何在不使用for循环的情况下实现此目的?
答案 0 :(得分:3)
不确定。您只需要从b
构建linear index并使用它来填充a
中的值:
a = zeros(6,5); % original matrix
b = [1 2 3 4 5 5]; % row or column vector with column indices into a
ind = (1:size(a,1)) + (b(:).'-1)*size(a,1); % build linear index
a(ind) = 1; % fill value at those positions
答案 1 :(得分:2)
与Luis Mendo's answer相同,但使用专用函数sub2ind
:
a( sub2ind(size(a),(1:numel(b)).',b(:)) ) = 1
答案 2 :(得分:1)
也可以通过下标到索引转换方式,
a = zeros(6,5);
b = [1 2 3 4 5 5];
idx = sub2ind(size(a), [1:6], b); % 1:6 just to create the row index per b entry
a(idx) = 1
答案 3 :(得分:0)
这些方法中的任何一种都适用于Octave:
bsxfun(@eq, [1:5 5]',(1:5))
[1:5 5].' == (1:5)