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!