【问题标题】:how to take the product of all the cells in a cell array in matlab如何在matlab中获取单元格数组中所有单元格的乘积
【发布时间】:2015-11-29 16:29:05
【问题描述】:

如何在 Matlab 中获取单元格数组的所有单元格的乘积?就我而言,我有一个单元格数组try_this,其中包含 125 个单元格。每个单元格都是一个 3x3 矩阵。

我想对所有这些矩阵进行乘积。

有什么好办法吗?

【问题讨论】:

  • 看看cellfun。另外,您是指常规矩阵乘积还是元素乘积?
  • 正则矩阵乘积。当我以cellfun(prod,try_this) 的身份执行 cellfun 时,我收到一个错误。它说没有足够的输入参数。
  • 感谢您的澄清。抱歉,我刚刚意识到 cellfun 不会像我想的那样在这里工作,因为您不是将函数单独应用于每个单元格,而是按顺序对每个较早的乘法结果和下一个单元格元素应用。

标签: matlab


【解决方案1】:

使用for-loop 可以做到这一点。下面将输出逐个收集到数组result

result = try_this{1}*try_this{2}; %// multiply first two cells
for k = 3:numel(try_this)
    result = result * try_this{k}; %// C{1}*C{2}* ... * C{k}
end

编辑:正如下面的 cmets 中所讨论的,对这种重复的矩阵乘法进行矢量化并不简单。

【讨论】:

  • 是的,这就是我所做的,但我正试图弄清楚如何对其进行矢量化,因为有很多矩阵。
  • @Glassjawed 好的。我将把这个答案作为参考,让我们看看是否有人用一个很酷的矢量化解决方案猛扑过来;)
  • @Glassjawed 这样的矩阵乘法不容易矢量化。在纸上写下 3-4-5 矩阵乘积的情况,索引是如何交织在一起的……即使一个(我的意思是 Divakar)可以以某种方式对其进行矢量化,它也可能会产生巨大的内存开销。换句话说:对于 125 个矩阵的矩阵乘积,您需要一个 124 倍和...
  • 切换到 3x3x125 矩阵而不是元胞数组并应用此解决方案是我期望的最快可能性。
  • @Glassjawed 对于 Daniel 的建议:使用 cat(3,try_this{:}) 表示懒惰(可能还有缓慢)。
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多