通过向量将矩阵元素设置为1

时间:2013-06-22 18:55:21

标签: matlab

我有一个载体

a = [1;
     3];

我有一个矩阵:

B = [0,0,0;
     0,0,0];

我想将矩阵的第a个元素设置为

B = [1,0,0;
     0,0,1];

如果没有for循环,我怎么能这样做?

2 个答案:

答案 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沿第一个维度对数组进行索引,然后是第二个,依此类推,其中第一个是沿着行。这个逻辑背后是手动计算的位置。