2016-12-06 2 views
0

Ich habe eine Matlab-Funktion, die eine Matrix und eine chunk_size als Eingabe nimmt, umformt es in Stücke von chunk_size Dimension.Matlab: Anwenden einer Funktion auf Datenblöcke

Zum Beispiel, wenn ich die folgende Matrix haben:

data= 
1  3 
2  5 
3 42 
4 35 
5 16 
6 48 
7  2 
8 22 
9 20 
10 39 
11 40 

die Funktion, eine chunk_size von 3 ausgeben wird unter Verwendung von:

data(:,:,1) = 
1  3 
2  5 
3 42 
data(:,:,2) = 
4 35 
5 16 
6 48 
data(:,:,3) = 
7  2 
8 22 
9 20 

Die letzten Zeilen der Originaldaten sind, weil sie weggeworfen passe nicht vollständig in einen Brocken.

Ich wäre jetzt in der Lage, die Benutzer, um eine Funktion für jeden Abschnitt der 3D-Matrix über einen Funktionsparameter zu bestimmen. So zum Beispiel, wenn der Benutzer eine Summe der Elemente anwenden will, könnte er die Summenfunktion von Matlab bereitgestellt verwenden zu erhalten:

data(:,:,1) = 
6 50 
data(:,:,2) = 
15 99 
data(:,:,3) = 
24 44 

Zugleich möchte ich beispielsweise dem Benutzer ermöglichen er gilt die Summenfunktion auf der anderen Dimension zu lassen, zu erhalten:

data(:,:,1) = 
4 
7 
45 
data(:,:,2) = 
39 
21 
54 
data(:,:,3) = 
9 
30 
29 

ich fühle mich all dies könnte irgendwie durch anonyme Funktionen oder ähnliches erhalten werden, aber ich kann nicht herausfinden, wie.

Jede Hilfe wird wirklich geschätzt.

Dank

Antwort

0
chunk_size=3; 
data= [1 3;2 5 ;3 42; 4 35; 5 16; 6 48; 7 2; 8 22; 9 20; 10 39; 11 40]; 
[m,n]=size(data); % m:row n:column 
m_new=mod(m,chunk_size); % how many rows to clear 

% process of clearing last (unwanted) rows 
while m_new~=0 
    data(m,:)=[]; 
    m=m-1; 
    m_new=m_new-1; 
end 

% process of creating 3D matrix 
a=1; 
for i=1:3 
    for j=1:chunk_size 
    new_data(j,:,i)=data(a,:); 
    a=a+1; 
    end 
end 

% conversion to name of new_data to data 
data=new_data; 

% example of sum row elements 
sum(data(:,:,1)) 

% example of sum column elements 
sum(data(:,:,1),2) 

Ausgang dieses

Verwandte Themen