get the output of an if clause in the order
Infos
Cette question est clôturée. Rouvrir pour modifier ou répondre.
Afficher commentaires plus anciens
Dear All,
My code is so long and unfortunately cannot copy all of it, but I guess I know what is the problem with the code. I do appreciate anyone's help to solve the problem. Thanks in advance.
I have a zero matrix defined as :
H = zeros (1, 100);
% Basically I defined this zero matrix to export the output into it. If you have any other alternatives which satisfy the needs, I am so welcome.
Here is my if clause which investigates for a desired condition.
if nnz(Rhh) ~= 0
% where Rhh is a matrix of (1,80) and defined in every step k, in other words for each k, there is only one Rhh matrix assigned to that specific k. For most of the k values, Rhh is a zero matrix.
What I simply need to do is write the first 100 k's which have the non-zero Rhh. The k's has to be written in the order into the matrix H. Here is the code I have written for it and I know what is the wrong with the code. However, cannot fix it.
for j=1:100
if (H(1,j)~=0)
continue
else
H(1,j)=k
end
Obviously the code does not work out. As soon as the first k is found, all of the elements of the matrix H will turns to the first value of k. Thus, there will be not zero elements left for other 99 k values.
I hope you kindly help me to figure it out.
All the Best,
HRJ
Réponses (1)
Star Strider
le 13 Août 2015
I’m not certain that I follow everything in your Question. I also have no idea what ‘k’ is. However, assigning ‘H’ would seem to me to be:
for j=1:100
if (H(1,j)~=0)
continue
else
H(1,j)=k(j);
end
end
There are more efficient ways to do that (using logical indexing), but considering I don’t know everything I would like to about what you’re doing, I would just change the loop to assign the appropriate element of ‘k’ to ‘H’.
4 commentaires
Homayoon
le 13 Août 2015
Star Strider
le 13 Août 2015
I can’t test this on your code, so bear that in mind if you decide to try it. I’m keeping your loop because although it is obvious from the code you posted that ‘H’ is uniformly zero so the first if condition will never be met, I am assuming you are doing something to ‘H’ before the loop to define it differently.
k = 0:10000; % Create Data
Rhh = randi([0 5], 1, 150); % Create Data
Rhh_idx = Rhh~=0; % Logical Vector: Non-Zero ‘Rhh’
kv = k(Rhh_idx); % Values of ‘k’ Corresponding to ‘Rhh_idx’
for j=1:100
if (H(j) == 0)
H(j)=kv(j);
end
end
I streamlined the loop, because you’re not doing anything if ‘H(j)’ is not zero.
I’m still not sure what you want.
Homayoon
le 13 Août 2015
Star Strider
le 13 Août 2015
I’m lost. I’m obviously not understanding what you want and am not providing you an answer you want.
I’ll delete my Answer in a few minutes.
Cette question est clôturée.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!