包含二维变维矩阵的单元格

  • 本文关键字:单元格 包含二 matlab
  • 更新时间 :
  • 英文 :


我有一个大的2D矩阵,比如1000 × 10。我试着把这个矩阵分成多个二维矩阵。它们可以是10 × 10, 5 × 10或者23 × 10。列的大小没有改变,我根据第一列中的数字拆分它们。(在我的实际情况中,我对前两列使用这种方法。)换句话说,我把具有相同id标签的行,这是向量的第一列值。

我正试图通过for循环来实现这一点。我认为最好将它们放入'cell array'中,因为cell array允许用户拥有不同维度和不同类型的数据。所以,我想要一个单元格(1 ×变N?)其中N是被分割的矩阵的数目并且有N个不同大小的二维矩阵。

我的问题是

  1. 在这种情况下,我应该认为单元格是三维的吗?

  2. 如何初始化具有不同维度的单元格?

  3. 给定我有一个n × m的二维矩阵,我如何将矩阵插入到一个单元格中?

没有很多不同单元格尺寸的引用。

下面是一个简单的示例,向您展示如何将数组导出为单元格:

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. 在这种情况下,3D单元阵列是不可取的。只需使用一维单元格数组,并将二维数组放入其中。

  2. 您可以使用myCell = cell(44,1)

  3. 初始化单元格数组
  4. 您可以使用myCell{4} = data(1:23, :)
  5. 填充单元格
例如,您可以编写以下代码:
% 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)

相关内容

最新更新