How do I store data that meet conditions of an if statement

55 vues (au cours des 30 derniers jours)
NA
NA le 1 Fév 2021
Commenté : NA le 3 Fév 2021
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

Réponse acceptée

Jan
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
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>
NA
NA le 3 Fév 2021
Thanks dpb, thats very useful information. Cheers

Connectez-vous pour commenter.

Plus de réponses (2)

dpb
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
  1 commentaire
NA
NA le 1 Fév 2021
I wrote it usuing a for loop because it's a subset of a larger code (and needs to be incorporated within a loop). But thank you for your feedback :) Cheers

Connectez-vous pour commenter.


J Chen
J Chen le 1 Fév 2021
You over wrote the variable data. One soluation is to change data to data(i).
  1 commentaire
dpb
dpb le 1 Fév 2021
The if condition will never be satisfied. if expression is true IFF all elements of expression are true.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements 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!

Translated by