选择 matlab 元胞数组中的第 n 个元素
choosing the nth element in a matlab cell array
我有一个维度为 1000x1(或更大)的元胞数组 VsCell。 VsCell 中的每一项都是一个 501x567 矩阵。我想提取在单元格中包含的所有矩阵中占据一个位置的元素。基本上是这样的:
VsCell{:}(1,1) - 对于单元格中数组的所有第一个元素
VsCell{:}(2,1) - 对于单元格中数组的所有第一行 2 元素。
随后,我打算取这些选择的平均值或中值并填充单个 [501x567] 矩阵数组,它代表 VsCell 数组的 mean/median/etc,例如均值(VsCell{:}(1,1)).
我尝试了 VsCell{:}(1,1) - 但它 returns "Bad cell reference operation."
另外,有没有办法在 loops/cellfun 的情况下实现这一点?
我无法使用在线找到的示例真正实现这一目标。
非常感谢您抽出宝贵时间,如果需要,我很乐意进一步澄清。
我不认为你想做的事情可以用细胞来完成,没有循环或 cellfun
,也就是说。单元格是异构数据结构,不能保证每个元素都具有兼容的形状。哎呀,单元格中的元素编号 3 甚至可以是另一个单元格、字符串或自定义 class 实例!我只是说,我对无法按照您尝试的方式对单元格进行索引并不感到惊讶。
但是,您可以将您的单元格构造cat
到更高维的数组中,并使用它:
VsMat = cat(3,VsCell{:}); % cell as comma separated list
MatMeans = mean(VsMat,3); % mean along dimension 3, where they are concatenated
MatMedians = median(VsMat,3);
MatSums = sum(VsMat,3);
无论如何,使用数组应该更快,所以除了调用 cat
的单一权衡(它很慢)之外,您最好还是使用同构数组。
我有一个维度为 1000x1(或更大)的元胞数组 VsCell。 VsCell 中的每一项都是一个 501x567 矩阵。我想提取在单元格中包含的所有矩阵中占据一个位置的元素。基本上是这样的:
VsCell{:}(1,1) - 对于单元格中数组的所有第一个元素 VsCell{:}(2,1) - 对于单元格中数组的所有第一行 2 元素。
随后,我打算取这些选择的平均值或中值并填充单个 [501x567] 矩阵数组,它代表 VsCell 数组的 mean/median/etc,例如均值(VsCell{:}(1,1)).
我尝试了 VsCell{:}(1,1) - 但它 returns "Bad cell reference operation."
另外,有没有办法在 loops/cellfun 的情况下实现这一点? 我无法使用在线找到的示例真正实现这一目标。
非常感谢您抽出宝贵时间,如果需要,我很乐意进一步澄清。
我不认为你想做的事情可以用细胞来完成,没有循环或 cellfun
,也就是说。单元格是异构数据结构,不能保证每个元素都具有兼容的形状。哎呀,单元格中的元素编号 3 甚至可以是另一个单元格、字符串或自定义 class 实例!我只是说,我对无法按照您尝试的方式对单元格进行索引并不感到惊讶。
但是,您可以将您的单元格构造cat
到更高维的数组中,并使用它:
VsMat = cat(3,VsCell{:}); % cell as comma separated list
MatMeans = mean(VsMat,3); % mean along dimension 3, where they are concatenated
MatMedians = median(VsMat,3);
MatSums = sum(VsMat,3);
无论如何,使用数组应该更快,所以除了调用 cat
的单一权衡(它很慢)之外,您最好还是使用同构数组。