python數值優化(Python優化)

本文目錄一覽:

python數據分析與應用第三章代碼3-5的數據哪來的

savetxt

import numpy as np

i2 = np.eye(2)

np.savetxt(“eye.txt”, i2)

3.4 讀入CSV文件

# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

c,v=np.loadtxt(‘data.csv’, delimiter=’,’, usecols=(6,7), unpack=True) #index從0開始

3.6.1 算術平均值

np.mean(c) = np.average(c)

3.6.2 加權平均值

t = np.arange(len(c))

np.average(c, weights=t)

3.8 極值

np.min(c)

np.max(c)

np.ptp(c) 最大值與最小值的差值

3.10 統計分析

np.median(c) 中位數

np.msort(c) 升序排序

np.var(c) 方差

3.12 分析股票收益率

np.diff(c) 可以返回一個由相鄰數組元素的差

值構成的數組

returns = np.diff( arr ) / arr[ : -1] #diff返回的數組比收盤價數組少一個元素

np.std(c) 標準差

對數收益率

logreturns = np.diff( np.log(c) ) #應檢查輸入數組以確保其不含有零和負數

where 可以根據指定的條件返回所有滿足條件的數

組元素的索引值。

posretindices = np.where(returns 0)

np.sqrt(1./252.) 平方根,浮點數

3.14 分析日期數據

# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

dates, close=np.loadtxt(‘data.csv’, delimiter=’,’, usecols=(1,6), converters={1:datestr2num}, unpack=True)

print “Dates =”, dates

def datestr2num(s):

return datetime.datetime.strptime(s, “%d-%m-%Y”).date().weekday()

# 星期一 0

# 星期二 1

# 星期三 2

# 星期四 3

# 星期五 4

# 星期六 5

# 星期日 6

#output

Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0.

1. 2. 3. 4.]

averages = np.zeros(5)

for i in range(5):

indices = np.where(dates == i)

prices = np.take(close, indices) #按數組的元素運算,產生一個數組作為輸出。

a = [4, 3, 5, 7, 6, 8]

indices = [0, 1, 4]

np.take(a, indices)

array([4, 3, 6])

np.argmax(c) #返回的是數組中最大元素的索引值

np.argmin(c)

3.16 匯總數據

# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

#得到第一個星期一和最後一個星期五

first_monday = np.ravel(np.where(dates == 0))[0]

last_friday = np.ravel(np.where(dates == 4))[-1]

#創建一個數組,用於存儲三周內每一天的索引值

weeks_indices = np.arange(first_monday, last_friday + 1)

#按照每個子數組5個元素,用split函數切分數組

weeks_indices = np.split(weeks_indices, 5)

#output

[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])]

weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)

def summarize(a, o, h, l, c): #open, high, low, close

monday_open = o[a[0]]

week_high = np.max( np.take(h, a) )

week_low = np.min( np.take(l, a) )

friday_close = c[a[-1]]

return(“APPL”, monday_open, week_high, week_low, friday_close)

np.savetxt(“weeksummary.csv”, weeksummary, delimiter=”,”, fmt=”%s”) #指定了文件名、需要保存的數組名、分隔符(在這個例子中為英文標點逗號)以及存儲浮點數的格式。

0818b9ca8b590ca3270a3433284dd417.png

格式字元串以一個百分號開始。接下來是一個可選的標誌字元:-表示結果左對齊,0表示左端補0,+表示輸出符號(正號+或負號-)。第三部分為可選的輸出寬度參數,表示輸出的最小位數。第四部分是精度格式符,以」.」開頭,後面跟一個表示精度的整數。最後是一個類型指定字元,在例子中指定為字元串類型。

numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)

def my_func(a):

… “””Average first and last element of a 1-D array”””

… return (a[0] + a[-1]) * 0.5

b = np.array([[1,2,3], [4,5,6], [7,8,9]])

np.apply_along_axis(my_func, 0, b) #沿著X軸運動,取列切片

array([ 4., 5., 6.])

np.apply_along_axis(my_func, 1, b) #沿著y軸運動,取行切片

array([ 2., 5., 8.])

b = np.array([[8,1,7], [4,3,9], [5,2,6]])

np.apply_along_axis(sorted, 1, b)

array([[1, 7, 8],

[3, 4, 9],

[2, 5, 6]])

3.20 計算簡單移動平均線

(1) 使用ones函數創建一個長度為N的元素均初始化為1的數組,然後對整個數組除以N,即可得到權重。如下所示:

N = int(sys.argv[1])

weights = np.ones(N) / N

print “Weights”, weights

在N = 5時,輸出結果如下:

Weights [ 0.2 0.2 0.2 0.2 0.2] #權重相等

(2) 使用這些權重值,調用convolve函數:

c = np.loadtxt(‘data.csv’, delimiter=’,’, usecols=(6,),unpack=True)

sma = np.convolve(weights, c)[N-1:-N+1] #卷積是分析數學中一種重要的運算,定義為一個函數與經過翻轉和平移的另一個函數的乘積的積分。

t = np.arange(N – 1, len(c)) #作圖

plot(t, c[N-1:], lw=1.0)

plot(t, sma, lw=2.0)

show()

3.22 計算指數移動平均線

指數移動平均線(exponential moving average)。指數移動平均線使用的權重是指數衰減的。對歷史上的數據點賦予的權重以指數速度減小,但永遠不會到達0。

x = np.arange(5)

print “Exp”, np.exp(x)

#output

Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]

Linspace 返回一個元素值在指定的範圍內均勻分布的數組。

print “Linspace”, np.linspace(-1, 0, 5) #起始值、終止值、可選的元素個數

#output

Linspace [-1. -0.75 -0.5 -0.25 0. ]

(1)權重計算

N = int(sys.argv[1])

weights = np.exp(np.linspace(-1. , 0. , N))

(2)權重歸一化處理

weights /= weights.sum()

print “Weights”, weights

#output

Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]

(3)計算及作圖

c = np.loadtxt(‘data.csv’, delimiter=’,’, usecols=(6,),unpack=True)

ema = np.convolve(weights, c)[N-1:-N+1]

t = np.arange(N – 1, len(c))

plot(t, c[N-1:], lw=1.0)

plot(t, ema, lw=2.0)

show()

3.26 用線性模型預測價格

(x, residuals, rank, s) = np.linalg.lstsq(A, b) #係數向量x、一個殘差數組、A的秩以及A的奇異值

print x, residuals, rank, s

#計算下一個預測值

print np.dot(b, x)

3.28 繪製趨勢線

x = np.arange(6)

x = x.reshape((2, 3))

x

array([[0, 1, 2], [3, 4, 5]])

np.ones_like(x) #用1填充數組

array([[1, 1, 1], [1, 1, 1]])

類似函數

zeros_like

empty_like

zeros

ones

empty

3.30 數組的修剪和壓縮

a = np.arange(5)

print “a =”, a

print “Clipped”, a.clip(1, 2) #將所有比給定最大值還大的元素全部設為給定的最大值,而所有比給定最小值還小的元素全部設為給定的最小值

#output

a = [0 1 2 3 4]

Clipped [1 1 2 2 2]

a = np.arange(4)

print a

print “Compressed”, a.compress(a 2) #返回一個根據給定條件篩選後的數組

#output

[0 1 2 3]

Compressed [3]

b = np.arange(1, 9)

print “b =”, b

print “Factorial”, b.prod() #輸出數組元素階乘結果

#output

b = [1 2 3 4 5 6 7 8]

Factorial 40320

print “Factorials”, b.cumprod()

#output

python 循環內要處理大量數據時怎麼優化

先嘗試優化程序的時間複雜度,尋找更有效的演算法

確保了演算法複雜度在可接受範圍之內後,開始進行常數優化,以下是Python優化的幾個小技巧:

實測表明,for語句一般比while語句效率更高

同樣實測表明,xrange一般比range要高效

如果要存儲動態數據(即有可能頻繁變動的數據)少用list和str,多用dict

實測表明,

兩個str的連接效率從高到低+=,join,+

多個str的連接效率從高到低join,+=,+

儘可能使用列表解析表達式和生成器表達式代替循環一遍來構建list

避免使用global關鍵字,無論是從代碼效率還是可移植性的方面考慮

優化Python編程的4個妙招

1. Pandas.apply() – 特徵工程瑰寶

Pandas 庫已經非常優化了,但是大部分人都沒有發揮它的最大作用。想想它一般會用於數據科學項目中的哪些地方。一般首先能想到的就是特徵工程,即用已有特徵創造新特徵。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函數。

在Pandas.apply()中,可以傳遞用戶定義功能並將其應用到Pandas Series的所有數據點中。這個函數是Pandas庫最好的擴展功能之一,它能根據所需條件分隔數據。之後便能將其有效應用到數據處理任務中。

2. Pandas.DataFrame.loc – Python數據操作絕妙技巧

所有和數據處理打交道的數據科學家(差不多所有人了!)都應該學會這個方法。

很多時候,數據科學家需要根據一些條件更新數據集中某列的某些值。Pandas.DataFrame.loc就是此類問題最優的解決方法。

3. Python函數向量化

另一種解決緩慢循環的方法就是將函數向量化。這意味著新建函數會應用於輸入列表,並返回結果數組。在Python中使用向量化能至少迭代兩次,從而加速計算。

事實上,這樣不僅能加速代碼運算,還能讓代碼更加簡潔清晰。

4. Python多重處理

多重處理能使系統同時支持一個以上的處理器。

此處將數據處理分成多個任務,讓它們各自獨立運行。處理龐大的數據集時,即使是apply函數也顯得有些遲緩。

關於優化Python編程的4個妙招,青藤小編就和您分享到這裡了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。

【Python基礎】python數據分析需要哪些庫?

1.Numpy庫

是Python開源的數值計算擴展工具,提供了Python對多維數組的支持,能夠支持高級的維度數組與矩陣運算。此外,針對數組運算也提供了大量的數學函數庫,Numpy是大部分Python科學計算的基礎,具有很多功能。

2.Pandas庫

是一個基於Numpy的數據分析包,為了解決數據分析任務而創建的。Pandas中納入了大量庫和標準的數據模型,提供了高效地操作大型數據集所需要的函數和方法,使用戶能快速便捷地處理數據。

3.Matplotlib庫

是一個用在Python中繪製數組的2D圖形庫,雖然它起源於模仿MATLAB圖形命令,但它獨立於MATLAB,可以通過Pythonic和面向對象的方式使用,是Python中最出色的繪圖庫。主要用純Python語言編寫的,它大量使用Numpy和其他擴展代碼,即使對大型數組也能提供良好的性能。

4.Seaborn庫

是Python中基於Matplotlib的數據可視化工具,提供了很多高層封裝的函數,幫助數據分析人員快速繪製美觀的數據圖形,從而避免了許多額外的參數配置問題。

5.NLTK庫

被稱為使用Python進行教學和計算語言學工作的最佳工具,以及用自然語言進行遊戲的神奇圖書館。NLTK是一個領先的平台,用於構建使用人類語言數據的Python程序,它為超過50個語料庫和辭彙資源提供了易於使用的介面,還提供了一套文本處理庫,用於分類、標記化、詞幹化、解析和語義推理、NLP庫的包裝器和一個活躍的討論社區。

Python實現斐波那契數列的方法以及優化

斐波那契數列 ( 義大利語 :Successione di Fibonacci) 的定義 :

斐波那契數列由0和1開始,之後的每個斐波那契數就是由之前的兩數相加而得出。具體數值如下:

0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,…………..

特別注意 :F(0)代表的是第一個數值,數列下標由0開始。

代碼如上,用了迭代的演算法計算每個數值,每個N值最大運行N-1次循環,演算法比遞歸要高效很多。遞歸代碼如下:

原創文章,作者:VXRV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147350.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VXRV的頭像VXRV
上一篇 2024-11-01 14:08
下一篇 2024-11-01 14:08

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論