performance - Numpy Hermitian 矩阵类

标签 performance numpy matrix linear-algebra multiplication

你知道 numpy 中的厄米矩阵类吗?我想优化矩阵计算,例如

B = U * A * U.H

,其中 A(以及 B)是埃尔米特的。如果没有指定,则计算 B 的所有矩阵元素。其实这里应该可以节省2倍左右。我错过了什么吗?

我需要的方法应该采用 A 的上/下三角形、U 的完整矩阵并返回 B 的上/下三角形。

最佳答案

我不认为存在针对您的特定问题的方法,但稍微考虑一下您可能能够从 SciPy 中包含的低级 BLAS 例程构建算法。例如,dgemmdsymmdtrmm 分别执行一般矩阵乘积、对称矩阵乘积和三角矩阵乘积。这是使用它们的示例:

from scipy.linalg.blas import dgemm, dsymm, dtrmm

A = np.random.rand(10, 10)
B = np.random.rand(10, 10)
S = np.dot(A, A.T)  # symmetric matrix
T = np.triu(S)  # upper triangular matrix

# normal matrix-matrix product
assert np.allclose(dgemm(1, A, B), np.dot(A, B))

# symmetric mat-mat product using only upper-triangle
assert np.allclose(dsymm(1, T, B), np.dot(S, B))

# upper-triangular mat-mat product
assert np.allclose(dtrmm(1, T, B), np.dot(T, B))

还有许多其他低级 BLAS 例程可用;我找到 the NETLIB page成为学习他们做什么的好资源。您或许能够巧妙地使用可用例程的某种组合来有效地解决您想到的问题。

编辑:看起来有一些 LAPACK 例程可以快速准确地计算出您想要的内容:dsytrdzhetrd , 但不幸的是,这些似乎并没有直接包装在 scipy.linalg.lapack 中, 虽然 scipy 确实提供了 cython wrappers为他们。祝你好运!

关于performance - Numpy Hermitian 矩阵类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33566475/

相关文章:

python - np.convolve 与 10**9 有什么问题?

matlab - 如何创建一个随机的 3D 矩阵?

firefox - Firebug Net 选项卡中报告的读取时间

python - 将 NumPy 数组分割为规则网格

javascript - 在最短的时间内从数据库中获取数据

python - 如何根据条件交换两行中选定的数据

c++ - 我应该使用简单的类还是高维矩阵?

c - 打印 matrix[20][20] with double type

mysql - 如何计算与另一个表相关的行数

javascript - 优化 JavaScript/jQuery 函数以获得更好的性能