我正在研究一种幂方法的实现,来计算给定矩阵的主导特征向量和特征值。我没有张贴完整的代码,我有一个具体的问题,我不能理解。在
在下面的循环中,我通过将每个步骤的计算出的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
由于}都指向同一数据。第一次完成后,它们将保持不变。在
x
和x0
是数组,因此得到一个错误。行x0 = x
不复制数据,而是使x
和{如果要将数据从
x
复制到x0
,则应使用x0 = x[:]
。slice语法([:]
)创建数据的一个副本,这样就可以了。在这是Python中常见错误之一的结果。当我们有一个列表
b
并设置a=b
时,我们并不是将a
的每个值都设置为b
的每个值。相反,我们将它们设置为相同的事物它们在记忆中是相同的位置。对其中一个的任何改变都会改变另一个。每当你有两个列表(或任何python对象)看起来总是一样的,或者一个对象在你不希望的时候发生了变化,你应该总是检查你是否做到了这一点。在如果是一张单子
^{pr2}$如果是纽比的话。在
假设这些是numpy数组,您还可以通过设置
而不是一个循环。它会更快,因为numpy已经过优化。在
相关问题 更多 >
编程相关推荐