Get every 4 values of a vector and change values

3 次查看(过去 30 天)
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

采纳的回答

DGM
DGM 2022-1-4
编辑:DGM 2022-1-4
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().

更多回答(1 个)

KSSV
KSSV 2022-1-4
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

类别

Help CenterFile Exchange 中查找有关 Denoising and Compression 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by