To compute a 7-day moving average:

J:

7 (+/%#)\ i.999

BQN:

(+´÷≠)˘7↕↕9

Python:

import numpy as np
from numpy.lib.stride_tricks import sliding_window_view

np.average(sliding_window_view(np.arange(0,1000,dtype=np.float64),7),axis=1)

Apple:

[((+)/x)%ℝ(:x)]\`7 (𝒻 0 999 1000)

Performance

   (10000000) 6!:2 '7 (+/%#) \ i.999'
1.82554e_6
   )time:100000 (+´÷≠)˘7↕↕999
29.9us
import numpy as np
from numpy.lib.stride_tricks import sliding_window_view

%timeit np.average(sliding_window_view(np.arange(0,1000,dtype=np.float64),7),axis=1)
59.6 µs ± 366 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
 > :bench [(+)/x%ℝ(:x)]\`7 (𝒻 0 999 1000)
benchmarking...
time                 8.849 μs   (8.813 μs .. 8.875 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 8.795 μs   (8.768 μs .. 8.826 μs)
std dev              96.22 ns   (82.58 ns .. 120.6 ns)

I suspect Python is slower because it allocates the entire intermediate array. In J (and Apple), we have an adverb which applies a verb to infixes directly; adroit choice of primitives make an array programming style feasible.