2013-05-19 74 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;