回覆列表
-
1 # 使用者710995342817
-
2 # 使用者7169188564904
def transpose(matrix):
M = len(matrix)
N = len(matrix[0])
t = []
for i in range(0, N):
r = []
for j in range(0, M):
r.append(matrix[j][i])
t.append(r)
return t
熟練使用 numpy 和 pandas 裡面自帶的 functions 會比自己寫 for loop 快很多倍,比如金融裡面求最大回撤,常規做法是一個 for loop。如果用 pandas.rolling_max,結果如下:對於一個一億個點的時間序列 ts, 用常規演算法在 Python 裡面要算 1min39s,而把 ts 先變成 pandas.Series 再用 rolling_max 只需要不到 3s. 裡面的具體演算法不是很清楚,希望 CS 專業人士來回答。還有很多其他的例子,樓上也提到了用 map, reduce, filter + lambda functional programming 的淫招,或者配合 pandas 的 groupby 使用。還有對於金融中的因子數值計算,強烈安利 numexpr (@gygigi khgjkbj 提到的)。下次有空寫個 numexpr library 在因子計算中的應用。