2013-05-19 39 views
1

我写了一个for循环代码,我想用更简洁的方式编写而不使用for循环,而是使用矩阵条件。 我正在教自己的matlab,我会很感激任何反馈。如何在不使用for循环的条件下将值添加到矩阵?

我想创建一个新的矩阵,第一列是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

较短的替代:

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

所得矩阵data由两个列向量:在y(:)sparse阵列,其中 “1” 的对应的位置为indices

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

1

如何

data = zeros(m, 2); 
data(:,1) = y; 
data(indices, 2) = 1; 
相关问题