¿Cómo manejar bien rebanar?

Al implementar una función de autocorrelación tengo un término como

for k in range(start,N): c[k] = np.sum(f[:-k] * f[k:])/(Nk) 

Ahora todo funciona bien si start = 1 pero me gustaría manejar bien el inicio en 0 casos sin condicional.

Obviamente, no funciona como está porque f[:-0] == f[:0] y devuelve una matriz vacía, mientras que en ese caso quisiera la matriz completa.

No utilice índices negativos en este caso.

 f[:len(f)-k] 

Para k == 0 devuelve la matriz completa. Para cualquier otro k positivo es equivalente a f[:-k]

Si k es cero, use Ninguno para la división, así:

 for k in range(start,N): c[k] = np.sum(f[:-k if k else None] * f[k:])/(Nk) 

Hay varias formas de hacerlo, probando si k==0 antes de aplicar la fórmula. Depende de usted encontrar el único que se vea mejor.

 for k in range(start,N): c[k] = np.sum(f[:-k] * f[k:])/(Nk) if k != 0 else np.sum(f * f[k:])/(Nk) 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:])/(Nk)