find 1s in the Matrix
5 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Walter Roberson
2022 年 9 月 29 日
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 件のコメント
Walter Roberson
2022 年 9 月 29 日
firstcol = 48;
lastcol = 65;
offsetcol = 36;
idx = firstcol:lastcol;
offsetidx = idx-offsetcol;
result = YourMatrix(:,offsetidx) .* (YourMatrix(:,idx) == 1);
その他の回答 (1 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
