Borrar filtros
Borrar filtros

find 1s in the Matrix

3 visualizaciones (últimos 30 días)
Matin jaberi
Matin jaberi el 29 de Sept. de 2022
Respondida: Matin jaberi el 30 de Sept. de 2022
Hi All,
I have a matrix 31996x66 and i need to write a if/else and for loop to do following.
the for loop must got through column 48 to 65 and anywhere the number is 1 it goes 36 cells back ()to the same row and save the number and if zero doesnt do anything.
for example:
if in row 500 coulumn 50 number is 1 then (50-36=14) it should go to row 500 column 14 and take the number and save in new table.
At the end the new Matrix should be 31996x(number of values for 1 in each row.)
  6 comentarios
Matin jaberi
Matin jaberi el 29 de Sept. de 2022
It has got nothing to do with my clients requirements. its me wanting to automate the excel sheet so the matlab run and find the numbers for me rather than I go through excel sheet myself. And there is no othere structure.
Matin jaberi
Matin jaberi el 29 de Sept. de 2022
there might be many different ways to find the numbers I need but thats the simplest script i came up with to get what I need.

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 29 de Sept. de 2022
firstcol = 48;
lastcol = 65;
offsetcol = 14;
idx = firstcol:lastcol;
offsetidx = idx-offsetcol;
result = YourMatrix(:,offsetidx) .* (YourMatrix(:,idx) == 1);
at the end the new Matrix should be 31996x(number of values for 1 in each row.)
You cannot do that; there could be a different number of 1's in each row and numeric matrices cannot have a different number of columns in each row.
The above code outputs an array the size of the subset, with 0 for the entries where the condition was not met.
I notice, by the way, that 62-14 = 48, so columns 48, 49, 50, 51 both act as numeric sources (values to be fetched) and as control information about which values are to be fetched. Is that overlap desired?
  2 comentarios
Matin jaberi
Matin jaberi el 29 de Sept. de 2022
Thanks for your answer, the offset call is 36 not 14. As i mentioned before if column number is 50 then take 36 out and the desired col would be col 14.
Walter Roberson
Walter Roberson el 29 de Sept. de 2022
firstcol = 48;
lastcol = 65;
offsetcol = 36;
idx = firstcol:lastcol;
offsetidx = idx-offsetcol;
result = YourMatrix(:,offsetidx) .* (YourMatrix(:,idx) == 1);

Iniciar sesión para comentar.

Más respuestas (1)

Matin jaberi
Matin jaberi el 30 de Sept. de 2022
so the box highlighted yellow is col 48 where number ==1 and the green one is column 14 is the same row. this should apply only when number is ==1

Categorías

Más información sobre Graphics Object Programming en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by