Can someone check my code ?
1 次查看(过去 30 天)
显示 更早的评论
Hello!
I have a binary matrix A (m*n),in each row i want to keep arbitrary just '1' in order to get sum in each row ="1"
at first i selected the last non zero value in each row with this code :
[rows, columns] = size(A)
% Create an array to keep track of the column of the last 1 in each row.
lastNonZeroColumn = zeros(rows, 1);
% Loop over rows, finding the last 1 in each row.
for row = 1 : rows
% Find the last 1 in this row, if any exist.
col = find(A(row, :), 1, 'last');
if ~isempty(col)
% At least one 1 exists. Log it's location.
lastNonZeroColumn(row) = col;
end
end
% Display results in command window:
lastNonZeroColumn
after this i picked out just '1' except the last non zero value, i used this code :
N=zeros(size(A);
for k=1:size(A,1)
index=find(A(k,1:lastNonZeroColumn(i)-1));
if isempty(index),continue;end
select=randperm(length(index),1);
N(k,index(select))=1;
end
but i still get '1' at the position of last non zero value.
can anyone help me please!
thanks in advance.
4 个评论
Walter Roberson
2022-9-15
(Not relevant to this question, but in order to get this message through to the poster who deleted a question earlier:)
With regards to the summation you asked about:
R in your equation appears to be a fixed value. You are adding the fixed value together T times,
R %t = 1 to 1
R+R = 2*R %t = 1 to 2
R+R+R = 3*R %t = 1 to 3
and so on.
And you are wanting to compare that matrix sum to the scalar value k.
- if k is 0 then D = 0, since sum t=1:0 of something is 0 as no elements would be added
- if k is > 0 and any R>0 then D = ceil(max(R(:))/k)
- if k is negative then D = 0 since as we showed above the empty sum is 0 and negative < 0
- if k is > 0 and all R<=0 then there is no solution
The analysis would be quite different if the equation were and it would be different again if it were something like
采纳的回答
Torsten
2022-9-11
移动:Cris LaPierre
2022-9-11
That's exactly what your code does in my opinion.
Or give an example where it does not perform as you described it should.
Found a mistake in your code:
index=find(A(k,1:lastNonZeroColumn(i)-1));
should of course be
index=find(A(k,1:lastNonZeroColumn(k)-1));
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!