Pythonは動的型付けのインタープリタ言語なので一つ一つの文や式の実行速度はネイティブな機械語で実行されるC言語のようなコンパイラーによるプログラムと比べると大変遅いです。
よって大量のデータに対する単純な繰り返し計算については、Pythonのループではなくネイティブな機械語で実装されたnumpyライブラリーの関数を活用して行うのが高速化の基本的な考え方になると思います。
本件に関していえばnumpyのunwrap関数が活用できると思うのですが・・・質問者さんの実装が不明ですのでPythonのループによる実装とnumpy.unwrapを使った処理の速度を比べてみました。
example.py
Python
1import numpy as np
2from time import perf_counter_ns
3
4unit = np.linspace(0, np.pi * 2, 5, endpoint=False)
5angles = np.block([unit for _ in range(1000000)])
6
7
8def unwrap1(angles):
9 discont = np.pi
10 res = []
11 prev_v = angles[0]
12 for v in angles:
13 dv = v - prev_v
14 if dv < 0:
15 dv += np.ceil(-dv / (2 * discont)) * 2 * discont
16 prev_v += dv
17 res.append(prev_v)
18 return res
19
20
21def unwrap2(angles):
22 return np.unwrap(angles)
23
24
25def timeit(exp):
26 t1 = perf_counter_ns()
27 res = eval(exp)
28 t2 = perf_counter_ns()
29 print(f"{exp}: {(t2-t1)/1E9:10.6f}")
30 return res
31
32
33timeit('unwrap1(angles)')
34timeit('unwrap2(angles)')
==>
bash
1$ python3 example.py
2unwrap1(angles): 9.613768
3unwrap2(angles): 0.214240
自分のPCはIntel Core i5-8400 2.8GHzです。
上のサンプルの実行時間を見るに、質問者さんは(細かな違いはあるでしょうが)unwrap1のような計算をしておられるのだろうと想像しました。
同じことをやるのでもnumpy.unwrapなどの関数を利用すれば全然スピードが違うということがわかります。このあたりに着目してご自分の実装を見直してみるとよいのではないでしょうか?
繰り返しになりますが、ポイントはPythonのループ(内包表記等も含む)を用いず、numpyの関数呼び出し(あるいはndarrayの演算)一発でまとめて計算することです。