2013-05-30 217 views
1

我仍然是一个新手,我很可能有一个关于矩阵数组的非常简单的问题。我有n行类似以下矩阵:Matlab填充矩阵数组

>> matrix 
1 678 543 
2 676 541 
3 543 987 
4 543 98 
1 433 54 
2 908 32 
3 457 54 
4 235 21 

如何创建大小相等的矩阵阵列? 即array{i,1}

这是问题的复制: Array of Matrices in MATLAB ,可能很多人的。

对我而言,不清楚的是如何填充我的固定维矩阵数组。这样

>>array{1,1} 
1 678 543 
2 676 541 
3 543 987 
4 543 98 

这里是我的尝试:
找到所有在matrix1柱和那些的matrixsize。 创建cell数组,看看每一行,如果它等于1创建一个array{i,1}零等于我想创建的矩阵的大小(在我的例子中为4x3)。
如果不等于1则向阵列中插入矩阵的前四个值。

有没有更快的方式来做到没有循环?

+1

[这个答案](http://stackoverflow.com/q/466972#467199)展示了如何另一个矩阵添加到您的3-d矩阵集合。您也可以使用[单元格阵列](http://www.mathworks.com/help/matlab/cell-arrays.html),但效率较低。 –

+0

我不知道这是你喜欢什么,但如果你喜欢array = matrix(1,:),它会将第一行中的所有元素复制到一个数组中。 – Akatosh

+0

@EitanT:谢谢,但我想使用单元格数组,以便能够更改代码,以防万一我有不同的维矩阵。 – seli

回答

1

您还可以使用mat2cell

mat2cell(matrix, [4 4]) 
+0

这将不起作用,因为每个子矩阵的行不是连续的。至少必须重新塑造原始矩阵。 –

+0

@EitanT我不确定你的意思。那么这个矩阵沿着它的第一维分裂成一个“4x3”和另一个“4x3”,对吧? – pm89

+0

我认为每个矩阵的第一列中的所有值都应该相等。所以第一个矩阵应该包含第一列中所有具有“1”的行,第二个矩阵应该包括第一列中所有具有“2”的行,_etc _... –