python中的希尔伯特矩阵码

时间:2018-06-17 13:31:03

标签: python python-3.x

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

一个<子> IJ =(I + J-1) -1

所以我尝试在python中编写代码。这是我的代码:

import math

a = int(input("Enter row"))
b = int(input("Enter column"))

def hilmat(a,b):
    li=[0]*b
    for i in range(a):
        for j in range(b):
            if(i+j>0):  
                ele=math.pow((i+j-1),-1)
                li += ele

            else:
                ele=math.pow((1-i-j),-1)
                li += ele
        j=j+1
    i=i+1

    return li


hilmat(a,b)

运行此命令会抛出此错误:

  

浮动对象不可迭代

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

此处的错误来自li += ele;由于li的类型为list,因此Python将此行作为将ele连接到li末尾的指令;但是ele是一个浮点数,所以这不可能,因为它不是一个列表,所以会引发错误。

由于您需要列表列表,因此最初应将li设置为[[]]*b;但实际上,要设置li形状[a,b],您需要设置li=[[]]*a

ele=math.pow((i+j-1),-1)中,您应该注意,由于Python索引从0开始,您可能需要使用ele=math.pow((i+j+1),-1)

将更多内容附加到数组的更常用语法是使用append方法。

i=i+1j=j+1都是多余的,因为for循环已经处理了增量。事实上,它们可能会导致错误。

return li应该与函数的其余部分缩进。

你的最终功能应该是:

def hilmat(a,b):
    li=[[]]*a
    for i in range(a):
        for j in range(b):
            ele=math.pow((i+j+1),-1)
            li[i].append(ele)
    return li

答案 1 :(得分:1)

操作li += ele尝试使用可迭代li扩展列表ele。此处ele不是可迭代的,而是float,因此您要追加它。将此行替换为。

li[i].append(ele)

虽然,您可以使用单个列表理解来有效地构建此矩阵。

代码

def hilmat(a, b):
    return [[1 / (i + j + 1) for j in range(b)] for i in range(a)]

实施例

from pprint import pprint

pprint(hilmat(3, 3))

输出

[[1.0, 0.5, 0.33],
 [0.5, 0.33, 0.25],
 [0.33, 0.25, 0.2]]