Substitute numbers in array
3 次查看(过去 30 天)
显示 更早的评论
How are you everyone!
I have the array X=[1 2 3 4 5 6 7 8] I want to flip this array and change the numbers as next
1 to 5 and 5 to 1
2 to 6 and 6 to 2
3 to 7 and 7 to 3
4 to 8 and 8 to 4
So the result which I want after flipping and substitution is
XX=[4 3 2 1 8 7 6 5]
0 个评论
回答(4 个)
Azzi Abdelmalek
2016-3-22
编辑:Azzi Abdelmalek
2016-3-22
X=[1 2 3 4 5 6 7 8]
XX=[fliplr(X(1:4)) fliplr(X(5:end))]
7 个评论
Azzi Abdelmalek
2016-3-22
Now if you want to flip just 8 element:
X=[1 2 3 4 5 6 7 8 9 10 11]
XX=[fliplr(X(1:4)) fliplr(X(5:8)) X(8+1:end)]
Stephen23
2016-3-22
编辑:Stephen23
2016-3-22
Try this function. The matrix M defines any arbitrary values to swap. Note that these values are not used as indices so this is a general solution to the problem.
>> M = [1:4;5:8].'; % each row specifies one pair of values to swap
M =
1 5
2 6
3 7
4 8
>> fun = @(X)fliplr(reshape(M(:,[2,1]),1,[])*bsxfun(@eq,X,M(:)));
and the examples you gave are:
>> fun([1,2,3,4,5,6,7,8])
ans =
4 3 2 1 8 7 6 5
>> fun([1,3,6,5,3,3,2,8,7,6,5])
ans =
1 2 3 4 6 7 7 1 2 7 5
>> fun([5,6,4,3,7,8,3,2,1,7,8])
ans =
4 3 5 6 7 4 3 7 8 2 1
0 个评论
Jan
2016-3-22
编辑:Jan
2016-3-22
A job for a lookup table:
X = [1, 2, 3, 4, 5, 6, 7, 8]
LUT = [5, 6, 7, 8, 1, 2, 3, 4]
Result = LUT(fliplr(X))
2 个评论
Steven Lord
2016-3-22
In that case I would make the LUT a sparse column vector.
X = [1, 1e9];
LUT = sparse(X, 1, [2, 73]);
Y = full(flip(LUT(X)))
Suraj Sudheer Menon
2020-6-22
The following could be an approach:-
sub=[5 6 7 8 1 2 3 4];
XX=flip(X);
for i=1:numel(X)
XX(i)=sub(XX(i));
end
%XX contains neccesary values.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!