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
0 个评论
采纳的回答
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]
b = repelem(any(reshape(a,4,[]),1),4)
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
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)'
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical (Boolean) Operations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!