在实现自相关函数时,我有一个像
这样的术语for k in range(start,N):
c[k] = np.sum(f[:-k] * f[k:])/(N-k)
现在一切正常,如果start = 1
但是我想在没有条件的情况下很好地处理0
案例的开始。
显然它不起作用,因为f[:-0] == f[:0]
并返回一个空数组,而在这种情况下我想要完整的数组。
答案 0 :(得分:7)
在这种情况下不要使用负面指数
f[:len(f)-k]
对于k == 0
,它返回整个数组。对于任何其他正面k
,它等同于f[:-k]
答案 1 :(得分:2)
如果k为零,则对切片使用None,如下所示:
for k in range(start,N):
c[k] = np.sum(f[:-k if k else None] * f[k:])/(N-k)
答案 2 :(得分:0)
通过在应用公式之前测试k==0
是否有几种方法。这取决于你找到唯一看起来更好的。
for k in range(start,N):
c[k] = np.sum(f[:-k] * f[k:])/(N-k) if k != 0 else np.sum(f * f[k:])/(N-k)
for k in range(start,N):
end_in_list = -k if k != 0 else None
start_in_list = k
c[k] = np.sum(f[:end_in_list] * f[start_in_list:])/(N-k)