minimum not zero in row

2 visualizaciones (últimos 30 días)
Marc Peña
Marc Peña el 10 de Mayo de 2018
Editada: Jan el 10 de Mayo de 2018
i want to find a way to go from one row to the next one that's indicated by the position of the minimum number excluding 0s until i get to the row i wanted.
Dmat = zeros(7,7);
output = [0 0 0 0 0 0 0];
O=1;
i=O;
T=7;
u=T;
c=1;
output(1)=O;
Dmat(1,1:7)=[0 4 6 5 0 0 0];
Dmat(2,1:7)=[4 0 3 0 7 0 0];
Dmat(3,1:7)=[6 3 0 11 8 0 0];
Dmat(4,1:7)=[5 0 11 0 2 10 12];
Dmat(5,1:7)=[0 7 8 2 0 5 0];
Dmat(6,1:7)=[0 0 0 0 5 0 3];
Dmat(7,1:7)=[0 0 0 12 0 3 0];
while i~=u
val = min(Dmat(~ismember(Dmat(i,1:7),0)));
ind = find(val==Dmat(i,1:7));
Dmat(1:7,i)=0;
i=ind;
output(c+1)=i;
c=c+1;
end
I don't know why the function i¡~ismember is not working for the second iteration. thx.
  1 comentario
dpb
dpb el 10 de Mayo de 2018
What is the result intended to be? Isn't clear what "to go to the next one" really means.
However, to find the location of the min() in the row w/o counting zeros, something like
D=D(Dmat(i,:)~=0); % select the subset
imin=find(Dmat(i,:)==min(D),1); % find loc in original
Wrote with a temporary for clarity of operations...

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 10 de Mayo de 2018
Editada: Jan el 10 de Mayo de 2018
The argument
Dmat(~ismember(Dmat(i,1:7),0))
considers the first column only. You want:
Dmat(c, ~ismember(Dmat(i,1:7),0))
or maybe
Dmat(~ismember(Dmat(i,1:7),0), c)
It is not getting clear to me, if you want to operate on rows or columns.
By the way: This is at least confusing:
O=1;
i=O;
T=7;
u=T;
c=1;
ismember is an overkill, if you want to exclude one value only. Easier:
val = min(Dmat(Dmat(i,1:7) ~= 0), c);
Instead of excluding the zeros dynamically, what about this:
Dmat = [0 4 6 5 0 0 0; ...
4 0 3 0 7 0 0; ...
6 3 0 11 8 0 0; ...
5 0 11 0 2 10 12; ...
0 7 8 2 0 5 0; ...
0 0 0 0 5 0 3; ...
0 0 0 12 0 3 0];
Dmat(Dmat == 0) = Inf;
Now you can search the minimum directly:
[~, ind] = min(Dmat(i, :))

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by