2015-04-26 4 views
2

У меня есть куча матриц одинакового размера т * п: a, b, c, d, и я хотел бы найти максимум их поэлементно, как:Matlab эквивалент в Python «уменьшить» функция

mx = max(a, max(b, max(c, d))); 

по-видимому, приведенный выше код не является достаточно кратким, я googled и не нашел много помощи о max на N матрицах или любой функции matlab, такой как python reduce. Я многому не научился о Matlab, так есть ли он?

ответ

3

Сделать n*m*4 матрицу ввода данных, то вы можете использовать max:

M=cat(3,a,b,c,d) 
max(M,[],3) 

cat с параметром 3 присоединяет свои матрицы вдоль третьего измерения, и max находит максимум по этому показателю. Для совместимости с произвольными размерами матрицы:

d=ndims(a) 
M=cat(d+1,a,b,c,d) 
max(M,[],d+1) 

Сократить себя не существует, и, как правило, вам не нужно, потому что многомерные входы или varargin сделать трюк, но если вам это нужно, это просто реализовать:

function r=reduce(f,varargin) 
%example reduce(@max,2,3,4,5) 
while numel(varargin)>1 
    varargin{end-1}=f(varargin{end-1},varargin{end}); 
    varargin(end)=[]; 
end 
r=varargin{1}; 
end 
+1

thx ~ :) не знал 'cat' для concat .. только знаю'; 'и', ' – zhangxaochen