我希望能在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
的新手。虽然看起来很有用。也许我没有看到更简单的方法?
答案 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)
这是另一种方法,利用了单元格数组中所有矩阵具有相同大小的事实:
代码:
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