Matlab 如何在不使用for循环的情况下有条件地向矩阵添加值?

Matlab 如何在不使用for循环的情况下有条件地向矩阵添加值?,matlab,Matlab,我已经编写了一个for循环代码,我想以更简洁的方式编写,而不使用for循环,而是使用矩阵条件。 我正在自学matlab,如有任何反馈,我将不胜感激 我想创建一个新的矩阵,第一列是y,第二列用零填充,除了y,其索引包含在索引矩阵中。在后一种情况下,添加1而不是0 谢谢 y=[1;2;3;4;5;6;7]; indices=[1;3;5]; [m,n]=size(y); tem=zeros(m,1); data=[y,tem]; [r,c]=size(indices); for i=1:r

我已经编写了一个for循环代码,我想以更简洁的方式编写,而不使用
for
循环,而是使用矩阵条件。 我正在自学matlab,如有任何反馈,我将不胜感激

我想创建一个新的矩阵,第一列是
y
,第二列用零填充,除了
y
,其索引包含在索引矩阵中。在后一种情况下,添加1而不是0

谢谢

y=[1;2;3;4;5;6;7];
indices=[1;3;5];
[m,n]=size(y);
tem=zeros(m,1);

data=[y,tem];

[r,c]=size(indices);
for i=1:r
  a=indices(i);
  data(a,2 )=1;
end

Output: 
data =

 1     1
 2     0
 3     1
 4     0
 5     1
 6     0
 7     0
怎么样

data = zeros( m, 2 );
data(:,1) = y;
data( indices, 2 ) = 1;
较短的备选方案:

data = [y(:), full(sparse(indices, 1, 1, numel(y), 1))];
结果矩阵
数据
由两个列向量组成:
y(:)
和一个
稀疏
数组,在
索引
对应的位置有“1”

使用适当的初始化和稀疏矩阵在MATLAB中非常有用