gpt4 book ai didi

python - 性能问题,使用亲和矩阵聚类,特征值

转载 作者:太空狗 更新时间:2023-10-30 00:46:37 26 4
gpt4 key购买 nike

我正在尝试对图像使用光谱聚类。我首先计算亲和性矩阵,然后尝试获取特征向量。但是,在 7056x7056 矩阵上,eig() 调用花费的时间太长。关于如何改进这个的任何建议?也许我应该使用不同形式的亲和性?

import matplotlib.pyplot as plt
import numpy as np

Img = plt.imread("twoObj.bmp")
Img2 = Img.flatten()
(n,) = Img2.shape
A = np.subtract.outer(Img2, Img2)
V,D = np.linalg.eig(A)

最佳答案

一种快速简便的优化方法是使用 np.linalg.eigh。 (还有 np.linalg.eigvalsh 如果您只想要特征值。)

因为你有一个对称矩阵(假设你取绝对值),你可以通过这种方式“告诉”numpy 使用更高效的算法。

import numpy as np
x = np.random.random(1000)
A = np.subtract.outer(x, x)
A = np.abs(A)
w, v = np.linalg.eigh(A)

比较时间,eigh 需要大约 5.3 秒,而 eig 需要大约 23.4 秒。

np.linalg.eig 等的性能将在很大程度上取决于 numpy 链接到哪些库。使用高度优化的 blas 库(例如 ATLAS 或 Intel 的 MKL)可能会有非常显着的差异,尤其是在这种情况下。

此外,根据 numpy 的构建方式,(例如,是否有 fortran 编译器可用)scipy.linalg.eigh 等可能更快。 scipy 和 numpy 也有可能链接到不同的 blas 库,尽管这不太可能。

关于python - 性能问题,使用亲和矩阵聚类,特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com