How do I store data that meet conditions of an if statement
23 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi All,
I'm slightly struggling trying to get my code to work, and I hope someone can point me in the right direction.
Very briedly, I have two vectors, 'xx' and 'yy'. I created a matrix using these two vectors, 'xy'. If xy(:,1) is ==1, I would like to store the corresponding cell in xy(:,2) in a seperate variable, 'data'. Otherwise, if the logical expression = 0, I'd like that cell to be a NaN
xx=[-3; -3; -3; -3; -3; -3; 1; -2; -2; -3; -3; -2; 1; 1; 1; -2; 1; 1; ];
yy=[26.28; 36.96; 90.00; 90.00; 90.00; 90.00; 27.85; 29.97; 47.03; 90.00; 67.22; 78.87; 19.60; 9.00; 2.00; 3.41; 1.88; 2.50];
xy=[xx yy];
for i=1:size(xy(:,1),1)
if xy(:,1)==1
data=xy(:,2);
else
data=NaN;
end
end
Thanks in advance.
Cheers
0 commentaires
Réponse acceptée
Jan
le 1 Fév 2021
Modifié(e) : Jan
le 1 Fév 2021
xx = [-3; -3; -3; -3; -3; -3; 1; -2; -2; -3; -3; -2; 1; 1; 1; -2; 1; 1; ];
yy = [26.28; 36.96; 90.00; 90.00; 90.00; 90.00; 27.85; 29.97; ...
47.03; 90.00; 67.22; 78.87; 19.60; 9.00; 2.00; 3.41; 1.88; 2.50];
xy = [xx yy];
data = nan(size(xx));
match = (xx == 1);
data(match) = xy(match, 2);
This "vectorized" method is faster and nicer than a loop. But with a loop:
data = nan(size(xy, 1), 1);
for i = 1:size(xy, 1) % better than: size(xy(:,1),1)
if xy(i, 1) == 1
data = xy(i, 2);
end
end
5 commentaires
dpb
le 2 Fév 2021
I posted a demonstration of what happens with dynamic allocation just a day or so ago at<Comment_1298378>
Plus de réponses (2)
dpb
le 1 Fév 2021
Don't need any loops nor the explicity xy array that is duplicate of existing data.
data=nan(size(x,1),2); % initialize to NaN
ix=(xx==1); % logical addressing vector of wanted locations
data(ix,:)=[xx(ix) yy(ix)]; % set data values
Alternatively,
data=[xx yy]; % initialize to data
data(data(:,1),:)=nan; % set unwanted values to NaN
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!