Arrays matlab单元阵列中第n个单元的选择

Arrays matlab单元阵列中第n个单元的选择,arrays,matlab,matrix,cell,Arrays,Matlab,Matrix,Cell,我有一个尺寸为1000x1(或更大)的单元阵列VsCell。VsCell中的每个项目都是一个501x567矩阵。我想提取占据单元格中所有矩阵位置的元素。基本上是这样的: VsCell{:}(1,1)-用于单元格中数组的所有第一个元素 VsCell{:}(2,1)-用于单元格中数组的所有第一行2元素 随后,我打算取这些选择的平均值或中位数,并填充单个[501x567]矩阵数组,它将表示VsCell数组的平均值/中位数/etc,例如平均值(VsCell{:}(1,1)) 我尝试了VsCell{:}(

我有一个尺寸为1000x1(或更大)的单元阵列VsCell。VsCell中的每个项目都是一个501x567矩阵。我想提取占据单元格中所有矩阵位置的元素。基本上是这样的:

VsCell{:}(1,1)-用于单元格中数组的所有第一个元素 VsCell{:}(2,1)-用于单元格中数组的所有第一行2元素

随后,我打算取这些选择的平均值或中位数,并填充单个[501x567]矩阵数组,它将表示VsCell数组的平均值/中位数/etc,例如平均值(VsCell{:}(1,1))

我尝试了VsCell{:}(1,1)-但它返回“坏单元格引用操作”

此外,是否有一种方法可以通过很少或没有for loops/cellfun来实现这一点? 我不能用网上的例子来实现这一点


非常感谢您的时间,如果需要的话,我很高兴进一步澄清。

我不认为您要做的事情可以用单元格来完成,没有循环或
cellfun
,也就是说。单元格是异构数据结构,不能保证每个元素都有一个兼容的形状。见鬼,单元格中的元素编号3甚至可以是另一个单元格、字符串或自定义类实例!我只是说,我不觉得奇怪,细胞不能被索引到你尝试的方式

但是,您可以con
cat
enate您的单元格到一个更高维的数组中,并使用该数组:

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
(这是一种缓慢的折衷方法)之外,使用同构阵列可能更好。

非常感谢@Andras!你说得对,我选择使用阵列来提高速度。cat对这项工作来说还不算太差,它比使用嵌套for循环做得更好,因为我的数据集可能会变得非常大。cat方法在数组的大小限制下运行良好,之后我会出现内存不足错误。你有什么建议吗。在这一点上,我甚至不介意cellfun或for循环的实现。Thanks@QP1这很有趣,我认为在
cat()
之后得到的数组比单元格本身占用的空间少。两种可能的解释是:(1)数据太大,同一时间只有一个副本可以放入内存,因此原始单元格+新数组太多,或者(2)
cat
有内存开销。在第二种情况下,您可以使用
VsMat=zero([size(VsCell{1},length(VsCell)]);
预先分配
VsMat(:,:,k)
k
上循环设置
VsMat,而不是使用
cat
。在第一种情况下,我不确定是否有简单的解决方法,所以请尝试第二种;)