如何很好地处理[:-0]切片?

时间:2016-02-08 07:50:40

标签: python numpy slice

在实现自相关函数时,我有一个像

这样的术语
for k in range(start,N):
    c[k] = np.sum(f[:-k] * f[k:])/(N-k)

现在一切正常,如果start = 1但是我想在没有条件的情况下很好地处理0案例的开始。

显然它不起作用,因为f[:-0] == f[:0]并返回一个空数组,而在这种情况下我想要完整的数组。

3 个答案:

答案 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)