Get every 4 values of a vector and change values

3 Ansichten (letzte 30 Tage)
Nikolas Spiliopoulos
Nikolas Spiliopoulos am 4 Jan. 2022
Hi all,
I have a vector like this
a= [1 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 0]
So I would like to take every four values in a group, check if there are any ones in it, and if yes change the four values to 1. otherwise leave zeros.
So the desired vector will be:
b= [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1]
can you help me with that?
thanks in advance,
Nikolas

Akzeptierte Antwort

DGM
DGM am 4 Jan. 2022
Bearbeitet: DGM am 4 Jan. 2022
Maybe something like this
a = [1 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 0]
a = 1×24
1 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 0
b = repelem(any(reshape(a,4,[]),1),4)
b = 1×24 logical array
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1
I'm assuming the input is nominally binarized already (i.e. either logical class or numeric class but integer-valued and constrained to [0 1]). If otherwise, you'll have to explicitly convert it to logical using some desired test.
If the output needs to be numeric class, cast it using double().

Weitere Antworten (1)

KSSV
KSSV am 4 Jan. 2022
a = [1 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 0] ;
b = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1] ;
idx = bsxfun(@plus, (1 : 4), (0 : numel(a) - 4).');
a = a(idx) ;
iwant = any(a,2)'
iwant = 1×21 logical array
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1

Kategorien

Mehr zu Denoising and Compression 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!

Translated by