0

我有一个矢量图

a = [1;
     3];

我有一个矩阵:

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

我想将矩阵的第一个元素设置为这样的元素

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

如果没有 for 循环,我怎么能做到这一点?

4

2 回答 2

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 内置函数来计算线性索引,而不是手动计算。这种方法不需要您知道矩阵是如何在内部存储的。

于 2013-06-22T19:32:47.057 回答
1

我假设这a是列子,而行子是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 沿第一个维度索引数组,然后是第二个维度,依此类推,第一个维度是沿行。这个逻辑隐藏在手动计算的位置之后。

于 2013-06-22T19:03:35.077 回答