【问题标题】:How to multiply matrix of nxm with matrix nxmxp different dimensions in matlab如何在matlab中将nxm矩阵与矩阵nxmxp不同维度相乘
【发布时间】:2014-11-25 10:43:47
【问题描述】:

在我当前的分析中,我尝试将维度为 nxm 的矩阵 (flm) 与矩阵 nxmxp 的逆矩阵相乘,然后使用此结果将其乘以矩阵的逆矩阵 (flm)。

我正在尝试使用以下代码:

flm = repmat(Data.fm.flm(chan,:),[1 1 morder]); %chan -> is a vector 1by3
A = (flm(:,:,:)/A_inv(:,:,:))/flm(:,:,:);

但是。由于尺寸问题,我收到以下错误消息: 使用 ==> mrdivide 时出错 输入必须是二维的,或至少一个 输入必须是标量。 要计算元素 RDIVIDE,请使用 RDIVIDE (./) 代替。

我不知道如何在不使用 for 循环的情况下继续进行,所以有人有什么建议吗?

【问题讨论】:

  • P.S.我复制了一个错误(第二个 flm 没有参数)所以它应该看起来像这样: flm = repmat(Data.fm.flm(chan,:),[1 1 morder]); A = (flm(:,:,:)/A_inv(:,:,:))/flm(:,:,:);
  • 欢迎来到 SO!请注意,您可以通过单击问题下方的“编辑”按钮来编辑您自己的问题。此外,如果您尝试尽可能地格式化代码(例如代码前面没有 27 个空格),那也很好。
  • 如何计算 3D 矩阵的逆矩阵?那是不可能的。每个 2D 切片是否分别反转?另外,为什么要计算 A 的(未定义的)逆并使用除法,而不是仅仅相乘?
  • 我不想反转 3D 矩阵,我需要的是反转矩阵 A_inv 的每一层(是的,每个 2D 切片单独反转),然后将其乘以 Data.fm .flm 矩阵(即 2by2 )。 A_inv 这个名字是为了让我知道我得到的矩阵(在程序的前面)还不是矩阵 A,而是我想要的矩阵的逆矩阵。

标签: matlab matrix multidimensional-array multiplication matrix-inverse


【解决方案1】:

我认为您正在寻找一种方法来方便地乘以矩阵,当一个矩阵的维数高于另一个矩阵时。在这种情况下,您可以使用bxsfun 自动“扩展”较小的矩阵。

x  = rand(3,4);
y = rand(3,4,5);
bsxfun(@times,x,y)

它非常简单,而且非常高效。

请务必查看doc bsxfun 了解更多示例。

【讨论】:

  • 感谢您的澄清。但是,我正在检查并且以下代码没有给我相同的结果: x = rand(3,3); y = 兰德(3,3,5); test1 = bsxfun(@times,x,y) for i = 1 :size(y,3) test2 = x*y(:,:,i);结尾;这是为什么?你知道吗?是因为 bsxfun '[...] 对数组 A 和 B [...] 应用逐元素二元运算',如果是这样我如何使用代数规则进行矩阵乘法来解决我的问题?
  • @tTimoteof,结果和究竟是什么一样?
  • @tTimoteof 它确实是逐个元素地进行乘法运算。如果您想要常规矩阵乘法,我会选择您在评论中提到的单个循环。只需确保结果矩阵在循环期间不会增长。
  • 好的,谢谢你的建议,那么我认为循环将是最好的选择。 @罗伯特P。就最终矩阵而言,结果相同,因为一个是 逐元素 乘法,而另一个是通过 矩阵乘法规则
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2012-01-31
  • 1970-01-01
相关资源
最近更新 更多