【问题标题】:Matlab: Applying a function to chunks of dataMatlab:将函数应用于数据块
【发布时间】:2016-12-06 13:03:36
【问题描述】:

我有一个 Matlab 函数,它以一个矩阵和一个 chunk_size 作为输入,将其重塑为 chunk_size 维度的块。

例如,如果我有以下矩阵:

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

函数,使用 3 的 chunk_size 将输出:

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提供的sum函数来获得:

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

我觉得所有这些都可以通过匿名函数或类似的东西以某种方式获得,但我不知道如何。

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: matlab matrix lambda anonymous-function


    【解决方案1】:
    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)
    

    这个的输出

    6 50

    4

    7

    45

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2012-11-02
      • 1970-01-01
      相关资源
      最近更新 更多