我有兩個陣列,元素x(的元素嚴格按升序排列,因此不能除以 0)和一個公式,我的新陣列的創建所基于的公式:tntv
v[i] = (x[i 1] - x[i]) / (t[i 1] - t[i])
我怎樣才能在 NumPy 中寫這個?我嘗試使用numpy.fromfunction但沒能成功。
我確實設法使用 for 回圈來做到這一點 - 但我覺得有更好的方法來做到這一點:
n = 100000
x = np.random.rand(n)
t = np.random.randint(1, 10, n)
t = t.cumsum()
def gen_v(x, t):
v = np.zeros(n - 1)
for i in range(0, n - 1):
v[i] = (x[i 1] - x[i])/(t[i 1]-t[i])
return v
v = gen_v(x, t)
%timeit gen_v(x, t)
輸出
156 ms ± 15 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
uj5u.com熱心網友回復:
您可以使用np.diff():
def gen_v(x,t):
return np.diff(x)/np.diff(t)
基準給我們:
# Your function:
8.45 ms - 557 us per loop (mean - std. dev. of 7 runs, 100 loops each)
# My function:
63.4 us - 1.62 us per loop (mean - std. dev. of 7 runs, 10000 loops each)
uj5u.com熱心網友回復:
你可以使用陣列切片
def gen_v(x, t):
return (x[1:] - x[:-1])/(t[1:] - t[:-1])
基準收益率
# Your Function
62.4 ms ± 1.52 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# Slicing
277 μs ± 3.34 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
在我微薄的硬體上。;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/519632.html
標籤:Python数组麻木的
