find 1s in the Matrix
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Matin jaberi
am 29 Sep. 2022
Beantwortet: Matin jaberi
am 30 Sep. 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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 29 Sep. 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 Kommentare
Walter Roberson
am 29 Sep. 2022
firstcol = 48;
lastcol = 65;
offsetcol = 36;
idx = firstcol:lastcol;
offsetidx = idx-offsetcol;
result = YourMatrix(:,offsetidx) .* (YourMatrix(:,idx) == 1);
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Graphics Object Programming finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!