相同西皮.利纳格.伊格()特征值不相等

2024-04-19 07:04:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python2.7、Numpy1.6.2和Scipy0.16.0来计算以下内容。在

我创造了一个哈达玛矩阵。然后我从矩阵的第0,2,4个向量中创建外积,并将它们相加,得到对角线0。然后我用西皮.利纳格.伊格(). 它是堕落的。前两个特征值相同,即-3。但当我用Python检查时,它说它们不一样。代码如下所示。在

from scipy import linalg as sp
import numpy
from numpy import linalg as np

def get_outer_product(vector):
    length = len(vector)

    outer_product = [[0 for x in range(length)] for x in range(length)]

    for i in range(0, length):
        for j in range(0, length):
            if i == j:
                outer_product[i][j] = 0
                continue
            outer_product[i][j] = vector[i] * vector[j]
    return outer_product

def test():
    hadamard_matrix = sp.hadamard(8)
    sum_of_outer_products = [map(sum, zip(*t)) for t in zip(get_outer_product(hadamard_matrix[0]), get_outer_product(hadamard_matrix[2]))]
    sum_of_outer_products = [map(sum, zip(*t)) for t in zip(sum_of_outer_products, get_outer_product(hadamard_matrix[4]))]

    e_vals, e_vecs = sp.eigh(sum_of_outer_products)
    print str(e_vals[0]) + " == " + str(e_vals[0]) + "?"
    print e_vals[0] == e_vals[1]

输出为:

^{pr2}$

我做错什么了?在


Tags: ofinforgetrangeproductziplength
1条回答
网友
1楼 · 发布于 2024-04-19 07:04:38

Floating point problem。在

使用float时,请始终小心使用equal运算符,并记住可能存在精度问题和use safe comparison

print str(e_vals[0]) + " == " + str(e_vals[0]) + "?"
print e_vals[0] == e_vals[1]
print numpy.isclose(e_vals[0], e_vals[1])

顺便说一下,在我的机器上,这两种情况都返回true:

^{pr2}$

相关问题 更多 >