GVKun编程网logo

基于 Kronecker 乘积的矩阵乘法(kronecker乘积性质)

8

对于想了解基于Kronecker乘积的矩阵乘法的读者,本文将是一篇不可错过的文章,我们将详细介绍kronecker乘积性质,并且为您提供关于ApacheSpark中的矩阵乘法、c–GSL-GNU中的矩

对于想了解基于 Kronecker 乘积的矩阵乘法的读者,本文将是一篇不可错过的文章,我们将详细介绍kronecker乘积性质,并且为您提供关于Apache Spark中的矩阵乘法、c – GSL-GNU中的矩阵乘法、c – 具有稀疏矩阵的二次型矩阵乘法算法、c – 如何在时间复杂度方面优化cpp中的矩阵乘法?的有价值信息。

本文目录一览:

基于 Kronecker 乘积的矩阵乘法(kronecker乘积性质)

基于 Kronecker 乘积的矩阵乘法(kronecker乘积性质)

如何解决基于 Kronecker 乘积的矩阵乘法?

我正在尝试使用每个 Kronecker 因子 A 和 B 的特征向量来获得 Kronecker 乘积矩阵的特征向量 kron(A,B)。我相信 Kronecker 乘积矩阵的每个特征向量是A 的特征向量和 B 的特征向量之间的克罗内克积。

我已经获得了因子的特征向量,但我无法找到一种有效的方法来获得 kron(A,B) 的特征向量,而不涉及循环两个因子矩阵。

这是我所拥有的(a、b 是 Kronecker 因子)。

evals_a,evecs_a = torch.linalg.eigh(a)
evals_b,evecs_b = torch.linalg.eigh(b)

这是我想要有效实施的:

evecs_kron_ab = []
for evec_a in evecs_a:
   for evec_b in evecs_b:
       evec_kron_ab = torch.kron(evec_a,evec_b)
       evecs_kron_ab.append(evec_kron_ab)

理想情况下,特征向量列表也是一个张量,每一行都是一个特征向量

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Apache Spark中的矩阵乘法

Apache Spark中的矩阵乘法

我正在尝试使用Apache Spark和Java执行矩阵乘法。

我有两个主要问题:

  1. 如何创建可以表示Apache Spark中矩阵的RDD?
  2. 如何将两个这样的RDD相乘?

c – GSL-GNU中的矩阵乘法

c – GSL-GNU中的矩阵乘法

请告诉我GSL库中矩阵乘法的功能.我搜索了很多,但我无法对它进行罚款.如果有人知道这个功能,请回答.提前致谢.

解决方法

我想你会想要使用gemm系列函数,比如 gsl_blas_sgemm().只需将标量设置为1,将添加的矩阵设置为零即可.一个例子是 here.

c – 具有稀疏矩阵的二次型矩阵乘法算法

c – 具有稀疏矩阵的二次型矩阵乘法算法

我正在优化代码,这些代码严重依赖于定制的Matrix库(它不会被排除在项目之外,因为它无处不在.这不是很好,但这是事实……)许多计算是用10-的矩阵完成的20行和列,许多计算包括二次形式
C = A*B*A'

我意识到A经常是稀疏的,我想利用这个事实.所以我正在寻找一种能够处理这种情况的算法.数值稳定性很重要.有什么我可以使用的吗?
(我没有写我们的图书馆所以我不知道是否有任何陷阱我应该考虑到?)

由于“我们的”简单O(n ^ 3)乘法在目标平台上的执行速度比本征3快,因为我需要数值稳定性且矩阵不是很大,我猜Strassen的算法以及coppersmith-Winograd算法都不是我正在寻找什么.相反,它只是二次形式乘法,让我可以轻松地检查A中的零.

谢谢你的任何建议!

解决方法

存在 this篇论文,处理快速稀疏矩阵乘法.所开发的算法将稀疏矩阵分为两部分:密集和稀疏,并在其上应用快速乘法算法.所以对我而言,它看起来并不依赖于矩阵的大小,就像你提到的Strassen一样,而是因为它很稀疏.

c – 如何在时间复杂度方面优化cpp中的矩阵乘法?

c – 如何在时间复杂度方面优化cpp中的矩阵乘法?

鉴于任何2个matrics a和b(没有特殊属性),我们有更好的计算乘法的方法吗?

for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
{
    mult[i][j]+=a[i][k]*b[k][j];
}

解决方法

如果你好奇它们是否存在于理论中,那么是的.例如,Strassen算法(见 https://en.wikipedia.org/wiki/Strassen_algorithm).它甚至不是我们所知道的最快的.就我而言,目前最好的是coppersmith-Winograd算法(见 https://en.wikipedia.org/wiki/Coppersmith%E2%80%93Winograd_algorithm),它类似于O(n ^ {2.37})(Strassen的时间复杂度类似于O(n ^ {2.8}).

但实际上它们比你编写的更难实现,并且它们在O()下隐藏了非常大的时间常数,所以你写的O(n ^ 3)算法在n值较低时更好,更容易实现.

还有一个Strassen的假设,声称对于每个eps> 0有一种算法将两个矩阵与时间复杂度O(n ^ {2 eps})相乘.但是你可能已经注意到它现在只是一个假设.

关于基于 Kronecker 乘积的矩阵乘法kronecker乘积性质的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Apache Spark中的矩阵乘法、c – GSL-GNU中的矩阵乘法、c – 具有稀疏矩阵的二次型矩阵乘法算法、c – 如何在时间复杂度方面优化cpp中的矩阵乘法?的相关信息,请在本站寻找。

本文标签: