matlab 将单元数组转换为矩阵[已关闭]

68bkxrlz  于 2023-08-06  发布在  Matlab
关注(0)|答案(1)|浏览(128)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

上个月关门了。
Improve this question
在MATLAB中,我有一个1x60单元阵列,其中每列是1x600000双精度。现在我的目标是把每个单元格作为一个列放在一个新的矩阵中。有人知道怎么做吗?
我尝试了很多次,但结果总是每列的矩阵1xsum。

inn6fuwd

inn6fuwd1#

到目前为止,最好的选择是将数据存储为单元数组中的列,或者更好的是,存储为预分配的矩阵。如果这是不可能的,你还有几个选择。

问题:

给定一个单元数组C(我将使用一个有4个单元的数组,每个单元包含一个1x5的行向量):

C =
{
  [1,1] = 8   7   2   2   7
  [1,2] = 6   8   6   6   5
  [1,3] = 5   10    7    6    9
  [1,4] = 8   4   4   9   9
}

字符串
如果你尝试直接在这个单元数组上使用cell2mat,它会给予你一个长的行向量。

重塑行向量:

您可以简单地将cell2mat(C)的结果从行向量整形为矩阵:

M = reshape(cell2mat(C), numel(C{1}), []); 
% or 
M = reshape(cell2mat(C), [], numel(C));

转置单元数组:

通过转置单元格数组,可以将每个单元格转换为结果矩阵的一行。然后,您可以转置矩阵以使每个单元格成为一列:

M = cell2mat(C.').';

转置每个单元格:

如果每个单元格都包含一个列向量,则cell2mat可以直接完成这项工作。您可以使用cellfun来处理循环:

M = cell2mat(cellfun(@transpose,C,'UniformOutput',false));


(需要UniformOutput=false,因为我们的单元不是标量。

好的老循环:

cellfun只是对我们隐藏了循环,所以我们可以在前面的方法中使用for循环,但是如果我们已经循环了单元格,为什么不简单地将向量存储到输出矩阵中,而不是修改单元格数组呢?

M = zeros(numel(C{1}), numel(C));
for column = 1:numel(C)
   M(:,column) = C{column}.';
end

相关问题