更新for循环Python中的变量

2024-10-02 08:26:17 发布

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

我正在研究一种幂方法的实现,来计算给定矩阵的主导特征向量和特征值。我没有张贴完整的代码,我有一个具体的问题,我不能理解。在

在下面的循环中,我通过将每个步骤的计算出的x分配给它来更新x0。这很好,但是,我需要计算每个步骤中x和{}之间的差异,并将它们保存在一个名为epsilon的变量中。在

由于x0赋值在epsilon计算之后出现在行中,所以我希望它能工作,但是在第一轮循环之后得到的epsilon是{},原因是在每一步中{}和{}是相同的。在

我一直在想这件事,但如果你能告诉我我做错了什么,我会很感激的。在

for k in range(10):
    y = matprod.matvec(m, x0)
    normy = normvec.normvec(y)
    for i in range(len(y)):
        x[i] = y[i] / normy
        epsilon[i] = x[i] - x0[i]
    x0 = x
    print k, x, x0, normy, epsilon

Tags: 方法代码infor步骤range矩阵差异
2条回答

由于xx0是数组,因此得到一个错误。行x0 = x不复制数据,而是使x和{}都指向同一数据。第一次完成后,它们将保持不变。在

如果要将数据从x复制到x0,则应使用x0 = x[:]。slice语法([:])创建数据的一个副本,这样就可以了。在

这是Python中常见错误之一的结果。当我们有一个列表b并设置a=b时,我们并不是将a的每个值都设置为b的每个值。相反,我们将它们设置为相同的事物它们在记忆中是相同的位置。对其中一个的任何改变都会改变另一个。每当你有两个列表(或任何python对象)看起来总是一样的,或者一个对象在你不希望的时候发生了变化,你应该总是检查你是否做到了这一点。在

x0 = x[:]

如果是一张单子

^{pr2}$

如果是纽比的话。在

假设这些是numpy数组,您还可以通过设置

x = y/normy
epsilon = x-x0

而不是一个循环。它会更快,因为numpy已经过优化。在

相关问题 更多 >

    热门问题