Info

此问题已关闭。 请重新打开它进行编辑或回答。

How to use firs value from array column when threshold and others change to zero, moreover if zero repeated for number of times change that element value?

1 次查看(过去 30 天)
Hello Everyone, I have the following code, which was provided by @Stephen Cobeldick, that converts array D
D= -2 2 3 -1 -5
1 4 7 3 4
5 3 -4 6 -5
-7 -2 -1 4 -1
To array B.
B=0 2 3 0 0
1 0 0 3 4
0 0 0 0 -5
-7 -2 -1 0 0
0 2 0 -5 0
Here is the code for that:
X= D>thr;
Y = D<thr & cumsum(X)>0;
Z = [X(1,:); diff(X)>0 | diff(Y)>0];
B = zeros(size(D));
B(Z) = D(Z)
In short this algorithm takes first value when threshold is reached and others are filled with zero. Now I would like to modify B array, that if zeros is repeated two times in a row, it would be change to -1 and the next value which is above or below threshold is changed to zero that result N array would look and the structure should be the same as in original array B that there can not be like this 1 0 0 -1 0 -1, it should be 1 0 0 -1 0 0:
N=0 2 3 0 0
1 0 0 3 4
0 -1 -1 0 -5
-7 0 0 0 0
0 2 0 -5 0
I have the following code that counts how many time value occurs in a row, but it just a bit of what I need:
x = [4 4 4 1 1 1 5 5 5 0 0 0 7 7 7 1 1 1 1];
i = find(diff(x)) ;
n = [i numel(x)] - [0 i];
c = arrayfun(@(X) X-1:-1:0, n , 'un',0);
d=cellfun(@(x) fliplr(x),c,'un',0);
y = cat(2,c{:});

回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by