Arrays 如何在不使用for循环的情况下,根据列索引向量更改矩阵元素?
我有一个Arrays 如何在不使用for循环的情况下,根据列索引向量更改矩阵元素?,arrays,matlab,matrix,octave,Arrays,Matlab,Matrix,Octave,我有一个矩阵 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 和bvector b = 1 2 3 4 5 5 我想用b矩阵值的参考值替换a矩阵中每一行的值,并最终生成如下矩阵,而不使用for循环 a_new = 1 0 0 0
矩阵
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
vector
b =
1 2 3 4 5 5
我想用b
矩阵值的参考值替换a
矩阵中每一行的值,并最终生成如下矩阵,而不使用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循环的情况下实现此功能?当然。您只需要从b
构建一个,并使用它填充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
这些方法中的任何一种都适用于倍频程:
bsxfun(@eq, [1:5 5]',(1:5))
[1:5 5].' == (1:5)
也可以通过下标到指数的转换方式
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
与相同,但使用专用功能:
如果b是行向量,我如何实现相同的功能?你的意思是什么<在我的示例和您的问题中,code>b
是行向量。你是说专栏吗?那么结果应该是什么呢?对不起,列向量。在实际情况中,“a”是大小为5000x10的矩阵,“b”是大小为5000x10的向量5000x1@manoos请参见编辑<代码>b
现在可以是行或列。我假设b
仍然包含a
中的列索引,如果b是行向量,如何实现相同的索引?可能重复
a( sub2ind(size(a),(1:numel(b)).',b(:)) ) = 1