2016-08-30 93 views
-4

如果我在加密過程中使用flipud()函數,我需要在解密過程中使用與它相反的函數。反向功能

是否有任何函數或代碼片段在MATLAB中執行flipud()函數的逆運算?

+5

是逆不公平。 ..再次翻轉? – excaza

+0

是的,但應該按照我認爲的相反順序完成。就像,flipud會翻轉下來,現在在解密我需要翻轉起來。 – sai

+3

調用'flipud'兩次。使用'A = rand(100,100);''B = all(全部(A == flipud(flipud(A))));' – rayryeng

回答

5

再次致電flipudflipud只需佔用矩陣的每一列,並顛倒順序,以便最後一行首先出現。要撤消逆轉,如果在已經逆轉的矩陣上執行flipud。反轉矩陣的最後一行成爲第一行,依此類推,所以你會得到原來的訂單。

觀察:

>> A = rand(100,100); 
>> B = isequal(A, flipud(flipud(A))) 

B = 

    1 

A是隨機100×100矩陣。我使用isequal來確保原始矩陣等於矩陣中每個單元的兩次翻轉矩陣。然而,如果你不想與名稱混淆......如果你真的,真的,真的......我的意思是真的......想要有一個函數「顛倒」一個已經顛倒過來的矩陣,你可以調用一個名爲flipdu功能爲您執行這個翻轉:

flipdu = @flipud; 
5

您可以定義一個輔助功能,吸頂式,來完成你所需要的:

function [output] = flipdu(A) 
%FLIPDU Flip array in down/up direction. 
% OUTPUT = FLIPDU(A) returns A with the order of elements flipped upside down 
% along the first dimension. For example, 
% 
% A = 1 4  becomes 3 6 
%  2 5    2 5 
%  3 6    1 4 
% 
% See also FLIPLR, ROT90, FLIP, FLIPUD. 
output = flipud(A); % Equivalent to flip(A, 1) 
end