2016-12-06 2 views
0

У меня есть функция Matlab, которая принимает в качестве входных данных матрицу и chunk_size, преобразует ее в куски размера chunk_size.Matlab: применение функции к фрагментам данных

Например, если у меня есть следующая матрица:

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

функцию, используя chunk_size выхода 3 будет:

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

Последние строки исходных данных отбрасываются, потому что они не вписываются полностью в кусок.

Теперь я мог бы дать пользователю, чтобы указать функцию, применяемую к каждому фрагменту 3D-матрицы через параметр функции. Так, например, если пользователь хочет применить сумму элементов, он может использовать функцию суммы, предоставляемой MATLAB для получения:

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

В то же время, я хочу, например, чтобы позволить пользователю чтобы позволить ему применить функцию суммы на другое измерение, чтобы получить:

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

Я чувствую, все это можно было бы получить как-то через анонимные функции или что-то подобное, но я не могу понять, каким образом.

Любая помощь будет действительно оценена.

Благодаря

ответ

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) 

выход этого

Смежные вопросы