【问题标题】:Hilbert Matrix in Python [duplicate]Python中的希尔伯特矩阵[重复]
【发布时间】:2019-05-18 09:01:37
【问题描述】:

希尔伯特矩阵是一个方阵,其元素由下式给出:

 A[i][j]= 1 / (i+j+1)

我的代码是:

def Hilbert(n):
    H = [[0]*n]*n
    for i in range(n):
        for j in range(n):
            H[i][j] = 1/(i+j+1)
    return H

例如对于 n = 3 它应该返回

[1, 1/2, 1/3]  
[1/2, 1/3, 1/4]  
[1/3, 1/4, 1/5]

但它返回 3 行

[1/3, 1/4, 1/5]  

我的错在哪里?

【问题讨论】:

    标签: python python-3.x matrix


    【解决方案1】:

    当你这样做时

    H = [[0]*n]*n
    

    最后一个*n 对第一个[0 0 0 .... (n)] 列表进行浅拷贝。通过修改第一列中的任何元素,您将更改所有列(列表中的项目是对第一列的引用)。

    Numpy 对数组操作很有用,但如果您不想使用它,请尝试

    H = [[0]*n for i in xrange(n)]
    

    要查看是否有元素指向同一个整数,可以试试

    for i in range(n):
        for j in range(n):
            print(id(H[i][j])) # [id() is the memory address](https://docs.python.org/2/library/functions.html#id)
    

    另外:使用 numpy 是

    H = np.zeros((n, n))
    

    参考:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.zeros.html

    【讨论】:

      【解决方案2】:

      错误在H init部分:

      H = [[0]*n]*n

      这将创建对相同内部列表的引用列表。 因此所有行都返回相同的值。

      尝试:

      H = [[0]*n for i in range(n)]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-09
        • 2019-10-16
        • 1970-01-01
        • 2010-09-11
        • 2017-02-14
        • 2012-08-10
        • 1970-01-01
        • 2012-03-05
        相关资源
        最近更新 更多