【问题标题】:Vectorizing matrix multiplication in matlab在matlab中向量化矩阵乘法
【发布时间】:2013-04-30 05:57:29
【问题描述】:

我想将矩阵乘积AX-XB转换成向量形式。

那是Cxx=vec(X)

然而我发现最后一个词 (XB) 很难向量化,它会非常稀疏。

有什么有效的方法吗?

see this link转换成向量形式

【问题讨论】:

  • 什么是vec?你问这个问题是什么意思? A*X-X*B 已经矢量化了?
  • vec 是向量化操作,就像将矩阵展平为向量一样。详细信息可以在这个wiki链接en.wikipedia.org/wiki/Vectorization_%28mathematics%29中找到
  • @Rein:需要找C吗?你需要找到Cx作为向量吗?你知道xVec = x(:),对吧?
  • 是的,我需要找到这样一个C
  • 猜想它与克罗内克积函数“kron”有关,但它似乎是内存昂贵。

标签: matlab matrix


【解决方案1】:

如果您不需要显式地使用C(例如迭代求解器),您可以定义一个抽象线性运算符来返回矢量化乘积C*x。不确定,Matlab 中是否有像 SciPy 的 LinearOperator 这样的特定函数,但匿名函数也应该这样做:

C_x = @(X) vec(A*X-X*B);

其中vec 'vectorises' 矩阵,例如正如@Jonas 指出的那样,通过X(:)

编辑:@Eitan T 在下面建议了一个封闭的表格!!

请参阅Matlab Help 了解如何使用匿名函数和函数句柄。

显式C 的公式为here

【讨论】:

  • 但是这里的vec 是什么?是来自文件交换吗? matlab没有这个功能vec
  • @Jan 其实vec(x)可以实现为reshape(x, [], 1),相当于x(:),所以:C_x = @(X)reshape(A*X-X*B, [], 1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
相关资源
最近更新 更多