我們的想法是在Numpy陣列的行之間進行減法。
這里提出了串列理解法。但是,我想知道是否有更有效和快速的方法。
目前,當給定一個大的arr
import numpy as np
nfreq=500
arr=np.array([[11850,0, 1],
[12310,0,3] 。
[13924,0,4] 。
[16690,0,1] 。
[17082,0,3] 。
[18746,0,4] 。
[21956,0,2] 。
[22324,0,3] 。
[23694,0,4] 。
[25382,0,1] 。
[25776,0,3] 。
[28592,0,4] 。
[31676,0,2] 。
[32028,0,3] 。
[33498,0,4]])
trange = np.where(arr == 3) [0]
val=[(arr[x,0], (arr[x,0]-arr[x-1,0)/nfreq, (arr[x 1,0]-arr[x,0])/nfreq) for x in trange ]
val=np.array(val)
uj5u.com熱心網友回復:
你可以嘗試矢量的等價物,然而由于有3個獨立的操作,在將它們合并到最終的陣列中仍有一個瓶頸。效率將取決于行的數量。
np.array([arr[trange, 0],
(arr[trange, 0]-arr[trange-1, 0)/nfreq,
(arr[trange 1, 0]-arr[trange, 0])/nfreq]).T
輸出:
array([[1.2310e 04, 9.2000e-01, 3.2280e 00]。
[1.7082e 04, 7.8400e-01, 3.3280e 00] 。
[2.2324e 04, 7.3600e-01, 2.7400e 00] 。
[2.5776e 04, 7.8800e-01, 5.6320e 00] 。
[3.2028e 04, 7.0400e-01, 2.9400e 00] ] ]
uj5u.com熱心網友回復:
你可以試試
a = arr[trange, 0]
b = (arr[trange, 0] - arr[trange-1, 0]) /nfreq
c = (arr[trange 1, 0] - arr[trange, 0])/nfreq
output = np.stack((a,b,c), axis=1)
# array([[1.2310e 04, 9.2000e-01, 3.2280e 00],)
# [1.7082e 04, 7.8400e-01, 3.3280e 00],
# [2.2324e 04, 7.3600e-01, 2.7400e 00],
# [2.5776e 04, 7.8800e-01, 5.6320e 00],
# [3.2028e 04, 7.0400e-01, 2.9400e 00]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309431.html
標籤:
上一篇:fputs緩慢地寫到磁盤上
