1

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

我想创建一个新矩阵,第一列是y,第二列用零填充,除了y索引包含在索引矩阵中的 's 。在后一种情况下,添加 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
4

2 回答 2

2

更短的替代方案:

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

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

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

于 2013-05-19T06:48:59.673 回答
1

怎么样

data = zeros( m, 2 );
data(:,1) = y;
data( indices, 2 ) = 1;
于 2013-05-19T05:37:10.557 回答