我有一个矢量图
a = [1;
3];
我有一个矩阵:
B = [0,0,0;
0,0,0];
我想将矩阵的第一个元素设置为这样的元素
B = [1,0,0;
0,0,1];
如果没有 for 循环,我怎么能做到这一点?
我有一个矢量图
a = [1;
3];
我有一个矩阵:
B = [0,0,0;
0,0,0];
我想将矩阵的第一个元素设置为这样的元素
B = [1,0,0;
0,0,1];
如果没有 for 循环,我怎么能做到这一点?
您可以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 内置函数来计算线性索引,而不是手动计算。这种方法不需要您知道矩阵是如何在内部存储的。
我假设这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 沿第一个维度索引数组,然后是第二个维度,依此类推,第一个维度是沿行。这个逻辑隐藏在手动计算的位置之后。