我有一个很大的2D矩阵,例如1000×10。我试图将该矩阵分成多个2D矩阵。它们可以是10乘10,5乘10或23乘10.列大小不会改变,我根据第一列中的数字拆分它们。 (在我的真实情况下,我是为前两列做的。)换句话说,我将具有相同id标记的行放入,这是向量的第一个列值。
我试图通过for循环实现这一点。我认为最好把它们放入一个“电池阵列”中。因为单元格数组允许用户拥有不同维度和不同类型的数据。所以,我想要一个单元格(1-by-varying-N?),其中N是分裂的矩阵数,并且有N个不同大小的2D矩阵。
我的问题是
在这种情况下,我应该将单元格视为三维?
如何初始化具有不同维度的单元格?
鉴于我在n-by-m中有二维矩阵,我如何将矩阵插入一个单元格?
没有很多具有不同细胞尺寸的参考文献。任何提示/答案都会非常感激。
答案 0 :(得分:2)
这是一个简单的例子,向您展示如何将数组输出到单元格中:
A=cell(2,1); % create a 2x1 cell array
A{1}=ones(3); % put a 3x3 matrix into the first cell
A{2}=rand(5); % put a 5x5 array into the second cell
A{3}=zeros(2); % grow the cell array to 3x1 and put a 2x2 matrix in the third cell
A % see what A looks like
因此,您可以增加单元格数组,例如在for
循环中,例如:
A=cell(5,1);
for i=1:5
A{i}= ...
end
答案 1 :(得分:1)
在这种情况下,不建议使用3D单元格数组。只需使用1D单元阵列并将2D数组放在其中。
您可以使用myCell = cell(44,1)
myCell{4} = data(1:23, :)
例如,您可以编写以下代码:
% Create some arbitrary data:
data = (1:1000)'*(1:10);
blockSize = 23;
% Create a cell array from scratch:
myCell2 = cell(ceil(1000/blockSize),1);
for ind = 1:ceil(1000/blockSize)
myCell2{ind} = data((ind-1)*blockSize +1 : min(ind*blockSize, end),:);
end
但我建议避免使用for循环并使用函数mat2cell(...)
,而不是这样:
% Create some arbitrary data:
data = (1:1000)'*(1:10);
blockSize = 23;
% Break it up with mat2cell:
myCell = mat2cell(data, [ones(44,1)*23; 11], 10)
% And just for fun, do a calcuation:
cellfun(@norm, myCell)