Numpy攻略 確定穩態

2021-08-31 07:28:25 字數 2487 閱讀 2155

馬爾可夫鏈:被用來描述至少有兩個狀態的系統,指數學中具有馬爾可夫性質的離散事件隨機過程。該過程中,在給定當前知識或資訊的情況下,過去(即當前以前的歷史狀態)對於**將來(即當前以後的未來狀態)是無關的。此類系統t時刻的狀態僅取決於t-1時刻的狀態。

穩態:在未來某個時刻之後或者從理論上講經過無限長時間之後,馬爾可夫鏈系統的狀態將不再改變,這個狀態被稱為穩態。

隨機矩陣包含了狀態之間轉移的概率,把隨機矩陣a應用於穩態,狀態將保持不變,用數學符號表示如下:

ax=x

具體步驟:

1.獲取一年的資料:使用matplotlib函式

[新的mpl_finance中沒有quotes_historical_yahoo,因此需要安裝fix_yahoo_finance安裝命令:pip install fix_yahoo_finance]

雅虎資料需要通過pandas_datareader獲取,

選取收價盤

3.確定狀態陣列

用sign函式,當numpy的sign函式的輸入引數為負值,正值和0時,其返回結果分別為-1,1,0

4.初始化隨機矩陣:使用zeros函式,對隨機矩陣進行初始化

5.選取每一種符號對應的起始索引狀態:使用where函式選取索引的起始索引。

6.平滑處理和隨機矩陣

加法平滑:在轉換次數上加乙個常數,從而避免出現概率為0的情況。

7.特徵值和特徵向量

numpy中的linalg模組和eig函式:返回乙個特徵值陣列和乙個特徵向量陣列。

完整的**如下圖:

import fix_yahoo_finance as yf

import pandas_datareader as web

from datetime import date

yf.pdr_override()

import numpy

import sys

#sys:負責python與直譯器的互動。

#sys.argv():實現程式外部向程式內部傳遞引數,指令碼的名稱是sys.argv[0]表示列表的第一列引數

#sys.exit():直譯器自動退出

if len(sys.argv)!=3:

print("usage python %s symbol k"%(sys.argv[0]) )

print("for instance python %s aapl 1"%(sys.argv[0]))

sys.exit()

#datetimie:日期時間函式

today=date.today()

start=(today.year-1,today.month,today.day)

quotes=web.get_data_yahoo(sys.argv[1],start,today)

close=[q[4] for q in quotes]

#diff函式:計算離散分差,預設計算一階分差

#sign函式:返回陣列的符號

states=numpy.sign(numpy.diff(close))

ndim=3

#numpy中的zeros函式:返回給定形狀和型別的新陣列,用0填充

sm=numpy.zeros((ndim,ndim))

signs=[-1,0,1]

k=int(sys.argv[2])

for i in range(len(signs)):

#從特定符號對應的狀態開始轉換

start_indices=numpy.where(states[:-1]==signs[i])[0]

n=len(start_indices)+k*ndim

#跳過總轉換次數為0的情況

if n==0:

continue

#獲取結束狀態的狀態值

end_values=states[start_indices+1]

for j in range(len(signs)):

#特定型別轉換發生的次數

occurrence=len(end_values[end_values==signs[j]])

sm[i][j]=(occurrence+k)/float(n)

print(sm)

#eig:返回陣列的特徵值的特徵向量

eig_out=numpy.linalg.eig(sm)

print(eig_out)

idx_vec=numpy.where(numpy.abs(eig_out[0]-1)<0.1)

print("index eigenvalue 1",idx_vec)

x=eig_out[1][:idx_vec].flatten()

print("steady state vector",x)

print("check",numpy.dot(sm))

Numpy攻略 Numpy常用函式之斐波那契數列

numpy 是乙個 python 的第三方庫,代表 numeric python 主要用於數學 科學計算。它是乙個由多維陣列物件和用於處理陣列的例程集合組成的庫。1.sqrt函式 計算平方根 示例 分割比的計算 段如下 import numpy 使用sqrt函式計算5的平方根 phi 1 numpy...

Numpy攻略系列 高階索引機制

所謂高階索引就是不使用整數或者切片作為索引值,在這一節重點介紹三類高階索引 常規的高階索引,位置列表型高階索引,布林型高階索引的一類。給定乙個矩陣,我們要求相關位置設定為特殊值,這裡我們就假定設定為0,高階索引不用通過一一按位置修改元素值。我們的任務將對角線上面元素置為0,索引用了兩個列表來代替了位...

Numpy攻略 用埃氏篩篩選

埃氏篩 篩選質數的一種演算法,用迭代的方式識別出已經找到的質數的倍數,能高效地篩選出小於一千萬的質數。讓我們去試著尋找10001個質數。具體步驟如下 1.建立乙個連續的整數列表 用arange函式 2.篩選出p的倍數 完整 如下圖 import numpy lim 10 6 n 10 9 p 100...