How to substitute one value in vector by vector?

6 views (last 30 days)
Hello,
I have got a vectro x=(-1 1 -1 1) and I need to replace positions containing -1 for a vector (1 2 3) and positions containing 1 for a vector (3 2 1). so the result should be x=(1 2 3 3 2 1 1 2 3 3 2 1).
Could somebody help me?
Thanks a lot

Accepted Answer

KSSV
KSSV on 23 Sep 2021
Edited: KSSV on 23 Sep 2021
x=[-1 1 -1 1] ;
iwant = cell(1,length(x)) ;
for i = 1:length(x)
if x(i) == -1
iwant{i} = [1 2 3 ];
elseif x(i) == 1
iwant{i} = [3 2 1] ;
end
end
iwant = cell2mat(iwant)
iwant = 1×12
1 2 3 3 2 1 1 2 3 3 2 1
%% No loop
% No loop
x=[-1 1 -1 1] ;
iwant = cell(1,length(x)) ;
iwant(x==1) = {[3 2 1]} ;
iwant(x==-1) = {[1 2 3]} ;
iwant = cell2mat(iwant)

More Answers (4)

Matt J
Matt J on 23 Sep 2021
Edited: Matt J on 23 Sep 2021
x=[-1 1 -1 1];
idx=(x==1);
X=nan(3,numel(x));
X(1,idx)=3;
X(2,idx)=2;
X(3,idx)=1;
X(:,~idx)=4-X(:,idx);
X=X(:).'
X = 1×12
1 2 3 3 2 1 1 2 3 3 2 1

Matt J
Matt J on 23 Sep 2021
x=[-1 1 -1 1];
i=(x+3)/2;
V=[1 2 3;3 2 1].';
X=reshape( V(:,i) ,1,[])
X = 1×12
1 2 3 3 2 1 1 2 3 3 2 1

Matt J
Matt J on 23 Sep 2021
x=[-1 1 -1 1];
x=strrep(10*x,10,[3,2,1]);
Warning: Inputs must be character vectors, cell arrays of character vectors, or string arrays.
x=strrep(x,-10,[1,2,3])
Warning: Inputs must be character vectors, cell arrays of character vectors, or string arrays.
x = 1×12
1 2 3 3 2 1 1 2 3 3 2 1

Matt J
Matt J on 23 Sep 2021
x=[-1 1 -1 1];
X=kron(-x,[1,2,3]);
X=X+4*(X<0)
X = 1×12
1 2 3 3 2 1 1 2 3 3 2 1

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!