在MATLAB中访问单元格的数据?

时间:2015-02-25 15:22:32

标签: matlab indexing analytics cell-array

我希望能在MATLAB中使用cellfun函数获得一些帮助。

假设我的单元格包含5个10x2矩阵,即

C = {[10x2], [10x2]...,[10x2]} 

但是,我想要一个新的单元格,它在每个数组的两列中占据前5行,即我想要

D = {[5x2], [5x2]...,[5x2]}

有没有办法在Matlab中使用cellfun执行此操作?我试着做了

D = cellfun(@(x) x(1:5),C,'UniformOutput',false)

然后这返回了一个单元格,它只包含每个数组中第一列的前5行(并且也被转置),即我得到了

D = {[1x5], [1x5]...,[1x5]}

希望我能很好地解释这一点。

有人可以帮忙吗?我认为这是一种简单的方法,但我是cellfun的新手。虽然看起来很有用。也许我没有看到更简单的方法?

2 个答案:

答案 0 :(得分:2)

您错过了列索引的定义:

A = rand(10,2)
C = {A,A,A,A,A};

%//           here ....|
D = cellfun(@(x) x(1:5,:), C,'UniformOutput',false)

在这种情况下,您需要所有列,这就是您使用:的原因。您也可以使用x(1:5,1:2) - 在您的情况下,它等于x(1:5,:)


C = 

  Columns 1 through 5

    [10x2 double]    [10x2 double]    [10x2 double]    [10x2 double]    [10x2 double]


D = 

  Columns 1 through 5

    [5x2 double]    [5x2 double]    [5x2 double]    [5x2 double]    [5x2 double]

答案 1 :(得分:1)

这是另一种方法,利用了单元格数组中所有矩阵具有相同大小的事实:

  1. 连接第三维的所有矩阵;
  2. 只保留所需的行;
  3. 从3D数组转换回单元格数组。
  4. 代码:

    N = 5; %// number of rows to keep
    D = cat(3, C{:}); %// step 1
    D = squeeze(mat2cell(D(1:N,:,:), N, size(C{1},2), ones(1,numel(C)))).'; %// steps 2 and 3