给定矩阵A和P,我需要计算"转置共轭" (不确定这个术语是什么)
我在想最快的方法是
Product: DbVisualizer Free 6.5.4
Build: #1362 (2009/02/05 20:09)
Java VM: Java HotSpot(TM) Client VM
Java Version: 1.8.0_25
Java Vendor: Oracle Corporation
OS Name: Windows XP
OS Arch: x86
OS Version: 5.1
An error occurred while establishing the connection:
Type: javax.naming.CommunicationException
Message:
Cannot connect to ORB
然而,这是O(n ^ 4),我也可以将它作为两个常规矩阵乘法,因此两次O(n ^ 3)。我在这里遗漏了什么,或者我应该坚持两次乘法
X = P A Transpose(P)
答案 0 :(得分:3)
如果您的目标是快速执行此操作,那么您不应该费心编写自己的矩阵乘法算法:使用Eigen等库。确实存在矩阵乘法算法具有比O(n ^ 3)更好的渐近时间复杂度,但是许多人对渐近时间复杂度过于信任也是如此。
另外,根据使用大矩阵in scientific research的经验,它们已经非常稀疏,所以我认为大密集矩阵乘法的实际情况比稀疏矩阵乘法要少。稀疏矩阵乘法的算法与密集矩阵乘法的算法非常不同。
要回答关于乘以三个矩阵的问题,您应该进行两次矩阵乘法,但顺序可能很重要。看看Matrix_chain_multiplication。矩阵乘法是关联的。让我们使用维基百科的例子。 A是10×30矩阵,B是30×5矩阵,C是5×60矩阵。然后,
(AB)C = (10×30×5) + (10×5×60) = 1500 + 3000 = 4500 operations
A(BC) = (30×5×60) + (10×30×60) = 9000 + 18000 = 27000 operations.
当所有矩阵具有相同的大小(如您的问题中)时,它并不重要。
如果您计划在CPU上继续优化密集矩阵乘法,则需要使用循环平铺,SIMD,线程和组装。几周之后,你可能会写一些与Eigen竞争的东西。