在 MATLAB 中访问单元格的数据?
Accessing data of a cell in MATLAB?
我希望我能在 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
的新手。虽然看起来很有用。也许有一种我没有看到的更简单的方法?
您缺少列索引的定义:
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]
这是另一种方法,利用元胞数组中的所有矩阵都具有相同大小这一事实:
- 沿三维连接所有这些矩阵;
- 只保留需要的行;
- 从 3 维数组转换回元胞数组。
代码:
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
我希望我能在 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
的新手。虽然看起来很有用。也许有一种我没有看到的更简单的方法?
您缺少列索引的定义:
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]
这是另一种方法,利用元胞数组中的所有矩阵都具有相同大小这一事实:
- 沿三维连接所有这些矩阵;
- 只保留需要的行;
- 从 3 维数组转换回元胞数组。
代码:
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