【问题标题】:Create multidimensional matrices from two multidimensional cells从两个多维单元创建多维矩阵
【发布时间】:2018-02-08 13:47:39
【问题描述】:

我有一个单元格f{k},里面有k 矩阵,其中k=1:96。对于每个k,矩阵具有不同的长度。例如length(f{1})==13length(f{96})==80。此外,我还有另一个单元格W{k}k=1:96。同样,对于每个k,矩阵具有不同的长度。例如length(W{1})==49length(W{96})==65

以下是单元格 f 的输出,对于单元格 f 的前 9 个元素:

第 1 到 9 列

  [13×1 double]    [24×1 double]    [36×1 double]    [43×1 double]    [48×1 double]    [65×1 double]    [81×1 double]    [95×1 double]    [107×1 double]

同样,以下是单元格W 的输出,代表W 的前9 个元素:

第 1 到 9 列

  [1×49 double]    [1×49 double]    [1×49 double]    [1×48 double]    [1×47 double]    [1×49 double]    [1×49 double]    [1×48 double]    [1×47 double]

现在,对于每个k=1:96,我想创建一个矩阵(比如M),它应该包含Wf 的索引。例如,如果我想要M(1),我应该得到大小为f{1}*W{1} 的矩阵。请注意,f{1}W{1} 的长度不同,对于每个 k,新矩阵的长度也会不同。

我该怎么做?

【问题讨论】:

  • 你的意思是M{1}而不是M(1),对吧?
  • 当您说f{1}*W{1}(即13x1 * 1x49)时,您希望得到outer product,对吧?
  • 顺便说一句,您似乎并没有真正的 multidimensional 单元格。
  • @SardarUsama 是的,M{1} 也可以。然后我可以将这个 M{1} 转换为矩阵。一般来说,我对编程(MATLAB)也很陌生。抱歉语法错误
  • @Dev-iL 不是产品,但我想显示该矩阵的大小

标签: matlab matrix vector size cell


【解决方案1】:

如果我理解正确,可以使用cellfun 来完成。这是一个演示:

c1 = {[1;1;1],[1;1;1;1;1],[1;1]}; % {3×1} {5×1} {2×1}
c2 = {[1,2],[1,2,3],[1,2,3,4,5]}; % {1×2} {1×3} {1×5}
out = cellfun(@times,c1,c2,'UniformOutput',false);

out =

  1×3 cell array

    {3×2 double}    {5×3 double}    {2×5 double}

如果您只想要 尺寸,您可以这样做:

M = cell2mat(cellfun(@(x,y)[size(x,1) size(y,2)],c1,c2,'UniformOutput',false).');

M =

     3     2
     5     3
     2     5

【讨论】:

  • { } 在结果中应该是 [ ]。不?不过你的代码是正确的
  • 这将两个单元格相乘,这不是预期的。不过感谢您的回复。
  • @Kulkarni - 您可以获取输出并将size 应用于每个元素..... @SardarUsama - 我复制粘贴了 R2017 的输出......
  • 您说:“所以以 M{1} 、 M{2} 等方式访问它们。不要将它们转换成单独的 96 个矩阵。这是一个非常糟糕的主意”。我就是这么想的。制作 96 个不同大小的矩阵,然后使用这 96 个矩阵中的每一个的索引作为优化问题的输入
  • @Dev-iL 刚刚验证(在 R2017a 中)。应该是[ ]
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 2017-02-24
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多