abu*_*kaj 8 python numpy floating-accuracy numerical-methods matrix-multiplication
我必须将矩阵相乘A(100x8000),B(8000x27)和C(27x1)。
由于矩阵B和C是常数并且A是可变的,因此我更喜欢将其计算为:ABC = np.dot(A, np.dot(B, C))。但是我不知道,它可能是数值恶化(在以下方面准确性)比np.dot(np.dot(a, B), C)。
可能重要的是:矩阵A并B包含8000个分别(分别)100个和27个相关特征的样本。
乘法在数值上(在精度上)是否最优?如果是,我该如何确定?
可以假定A和B矩阵都是非负的。此外:
C = np.linalg.solve(cov(B, k), X)
Run Code Online (Sandbox Code Playgroud)
其中X是27x1矩阵,其中包含27个(可能是相关的)未知分布的随机变量cov = lambda X, k: np.dot(X.T, X) + k * np.eye(X.shape[1]),并且k是将表达式最小化的非负常数:
sum((X[i, 0] - np.dot(np.dot(B[:, [i]].T, drop(B, i)),
np.linalg.solve(cov(drop(B, i), k),
np.delete(X, i, axis=0))) **2
for i in range(27))
Run Code Online (Sandbox Code Playgroud)
该drop()函数定义为lambda X, i: np.delete(X, i, axis=1)。
可以假设np.cov(B.T, B)是的协方差矩阵X,它遵循多元高斯分布。
For*_*Bru -1
三个矩阵相乘不是总是比两个矩阵相乘慢吗?
你实际上只有两个选择:(AB)C和A(BC)。因为BC = const,您可以拥有一个T = BC形状常数8000x1,然后相乘而AT无需重新计算T。
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |