避免在Python中使用copy方法
我写了一个用Python实现de Casteljau算法的函数。
from __future__ import division
import numpy as np
import copy
def decasteljau(P, t):
N = len(P)
for k in range(N-1):
for r in range(N-1-k):
P[r] = (1-t)*P[r] + t*P[r+1]
return P[0]
然后我用以下数据调用了这个函数。
P = np.array([[1.,1.],[2.,3.],[3.,2.]], dtype=float)
M = 1000
for j in range(M):
t = decasteljau(P, j/(M-1))
结果几乎所有的t = j/(M-1)
值都得到了成千上万的(错误的)结果[3,2]
。我把代码改成了:
def decasteljau(P, t):
N = len(P)
Q = copy.copy(P)
for k in range(N-1):
for r in range(N-1-k):
Q[r] = (1-t)*Q[r] + t*Q[r+1]
return Q[0]
这样我在改变数组P
之前先复制了一份,现在数据是正确的。我其实不太明白为什么现在这样有效,我在想有没有不使用复制的方法来解决这个问题?谢谢!
这是没有使用复制方法的数据图和使用复制方法的数据图:
显然,第一个图是不正确的。第一个图的大部分点都在3,2
,这不是我想要的结果。