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

时间:2013-05-19 05:11:43

标签: 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
  a=indices(i);
  data(a,2 )=1;
end

Output: 
data =

 1     1
 2     0
 3     1
 4     0
 5     1
 6     0
 7     0

2 个答案:

答案 0 :(得分:2)

更短的选择:

data = [y(:), full(sparse(indices, 1, 1, numel(y), 1))];

生成的矩阵data由两个列向量组成:y(:)sparse数组,在与indices对应的位置处有“1”。

使用正确的初始化和稀疏矩阵在MATLAB中非常有用。

答案 1 :(得分:1)

怎么样

data = zeros( m, 2 );
data(:,1) = y;
data( indices, 2 ) = 1;