我有一个载体
a = [1;
3];
我有一个矩阵:
B = [0,0,0;
0,0,0];
我想将矩阵的第a个元素设置为
B = [1,0,0;
0,0,1];
如果没有for循环,我怎么能这样做?
答案 0 :(得分:2)
您可以使用sub2ind
matlab函数。它创建了所谓的线性索引,您可以使用它来索引矩阵而不是行列索引:
% size of the B matrix
sz=[2,3];
% column indices
a = [1,3];
% row indices
b = [1:sz(1)];
% initialize B
B=zeros(sz);
% set values in B
B(sub2ind(sz,b,a))=1
B =
1 0 0
0 0 1
它与Oleg提出的基本相同,只是使用matlab内置函数来计算线性索引,而不是手工完成。这种方法不需要您了解矩阵如何在内部存储。
答案 1 :(得分:1)
我假设a
是列subs,而row subs是1:numel(a)
:
a = [1,3];
% Retrieve output size
sz = [numel(a) max(a)];
% preallocate
B = zeros(sz);
% calculate positions
pos = (a-1)*sz(1) + (1:sz(1));
B(pos) = 1
注意:MATLAB沿第一个维度对数组进行索引,然后是第二个,依此类推,其中第一个是沿着行。这个逻辑背后是手动计算的位置。