Hilbert Matrix in Python
本问题已经有最佳答案,请猛点这里访问。
希尔伯特矩阵是一个方形矩阵,其元素由以下公式给出:
1 | A[i][j]= 1 / (i+j+1) |
我的代码是:
1 2 3 4 5 6 | 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 2 3 | [1, 1/2, 1/3] [1/2, 1/3, 1/4] [1/3, 1/4, 1/5] |
但它返回3行
1 | [1/3, 1/4, 1/5] |
我的错误在哪里?
错误出现在H初始化部分:
H=[〔0〕*n〕* n
这将创建对相同、内部和列表的引用列表。因此,所有行返回相同的值。
尝试:
范围(n)内i的h=[[0]*n
当你这样做的时候
1 | H = [[0]*n]*n |
最后一个
numpy适合数组操作,但如果不想使用它,请尝试
1 | H = [[0]*n for i in xrange(n)] |
要查看是否有指向相同整数的元素,可以尝试
1 2 3 | 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) |
旁白:用麻木的
1 | H = np.zeros((n, n)) |
参考:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.zeros.html