日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SciPy入门指南

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SciPy入门指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SciPy入門指南(譯)


SciPy入門指南

這個教程是為了幫助初學者掌握scipy并且肯能快地實際使用。

  • toc
    {:toc }

什么是scipy、numpy、matplotlib?

Python是一種通用語言。它被解釋運行,是動態類型語言,并且非常適合交互工作和快速實現原型,然而又足夠強大用來寫大型應用。

NumPy是一個定義了數值數組和矩陣類型和它們的基本運算的語言擴展。

SciPy是另一種使用NumPy來做高等數學、信號處理、優化、統計和許多其它科學任務的語言擴展。

Matplotlib是一個幫助繪圖的語言擴展。

它們是用來干什么的?

SciPy和其它這些能用來完成許多任務:

  • 首先它們很適于用來進行嚴重依賴數學和數值運算的計算,它們可以原生地使用數組、矩陣和對數組和矩陣的運算,求出特征根,計算積分,解決微分方程。

    NumPy的數組類(被用來實現矩陣類的基礎)是考慮速度的實現,所以存取NumPy數組比存取Python列表速度更快。此外,NumPy實現一種數組語言,以致于不需要大多數循環。例如,普通Python(C等等也是相似的):

    a = range(10000000) b = range(10000000) c = [] for i in range(len(a)):c.append(a[i] + b[i])

    這個循環將在幾GHz的處理器上耗時5到10秒,而NumPy:

    import numpy as np a = np.arange(10000000) b = np.arange(10000000) c = a + b

    不僅這個更加簡潔和易讀,而且相比幾乎是瞬間的,甚至NumPy的導入都比普通Python中的循環更快。為什么?Python是一種動態類型的解釋語言,這意味著在每次循環迭代時它都必須檢查運算對象a和b的類型來選則+正確的意義。(在python中+被用到許多地方,比如連接字符串、可以有不同元素類型的列表)當’+’的操作對象之一是一個NumPy數組時,NumPy的add函數將被Python自動選擇,僅僅檢測一次類型。然后它通過編譯C函數執行”真正的”加法循環。這和普通python中的解釋循環相比是非常快的。

  • 有許多通用的或特定用途的數值代碼使用了numpy和scipy。參考局部軟件索引來查看部分列表。Python有許多用來創建交互應用的高級的模塊(例如TraitsUI和wxPython)。和scipy一同使用這些是最快的創建科學應用的方法。

  • 使用ipython使得交互工作更加簡單。數據處理,數值模型探索,在運行中嘗試運算可以很快地從一個想法得到結果(參考artical on ipython)。

  • matplotlib模塊制造高質量的繪圖,通過它你可以把你的數據和模型轉化為展示或文章用的圖像。不必在一個程序中做數值計算,保存數據,然后用另一個繪圖。

如何使用scipy工作

Python是一門語言,它有幾個用戶界面。沒有一個單獨的程序可以開始并且給一個集成的用戶體驗。取而代之的是各種使用python的方法。^1

最普遍的方法是使用高級python交互shell來輸入命令和運行腳本。腳本可以用任何編輯器來寫,例如SPE,PyScripter,甚至notepad,emacs或者vi/vim。

scipy和numpy默認都沒有提供繪圖函數。它們僅僅是數值工具。推薦的繪圖工具包是matplotlib。

在Windows、Mac OS X和Linux下,所有這些工具都被Enthought Python發行版提供,獲取更多關于安裝這些的指導參考此站點安裝scipy部分。

學習使用scipy

最快的使用scipy工作的方法可能就是這個交互數據分析教程

去學習Python語言,python教程可以讓你迅速熟悉python語法和對象。你可以從http://docs.python.org/download.html下載這個教程。

Dave Kuhlman的numpy和scipy教程是另一個很好的介紹:http://www.rexx.com/~dkuhlman/scipy_course_01.html.

本站點上的文檔和Cookbook部分提供更多學習材料。

示例會話

交互工作

讓我們看看在矩形窗函數的傅利葉變換。我們將使用一個交互python shell——ipython來做這個。因為我們想要通過交互繪圖呈現結果,我們將啟動使用--pylab參數啟動ipython,這個參數允許使用matplotlib交互。

$ ipython --pylab Python 2.5.1 (r251:54863, May 2 2007, 16:27:44) Type "copyright", "credits" or "license" for more information. IPython 0.7.3 -- An enhanced Interactive Python. ? -> Introduction to IPython's features. %magic -> Information about IPython's 'magic' % functions. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more.Welcome to pylab, a matplotlib-based Python environment.For more information, type 'help(pylab)'.

ipython提供了許多方便的特性,想tab補全python函數和一個優秀的幫助系統。

In [1]: %logstart Activating auto-logging. Current session state plus future input saved. Filename : ipython_log.py Mode : rotate Output logging : False Raw input log : False Timestamping : False State : active

這個激活一個登錄會話到一個文件。登錄文件格式允許在以后就像一個python腳本一樣被簡單的執行,或編輯進一個程序。ipython也記錄所有的輸入輸出(并把它們保存在叫In和Out的列表中),因此你可以啟動有追溯的登錄。

In [2]: from scipy import *

因為numpy和scipy不是構建在python中的,你必須顯示地告訴python加載它們的特性。Scipy提供numpy所以當導入scipy時導入它是不必要的。

現在開始實際的數學:

In [3]: a = zeros(1000) In [4]: a[:100]=1

第一行正如你所期望的那樣簡單地創建了一個有1000個0的數組;numpy默認使這些0是雙精度浮點數,但是如果我想要單精度或復數,我可以指定zeors的額外參數。第二行把一百個元素設置成-1.

然后我想要對這個數組進行傅利葉變換,scipy提供fft函數來完成這些:

b = fft(a)

為了看看b是什么樣的,我將使用matplotlib庫。如果你使用”–pylab”啟動ipython將不需要導入matplotlib。否則你應導入它:from pylab import *但是你將沒有交互功能(當你創建時自動繪圖)。

In [6]: plot(abs(b)) Out[6]: [<matplotlib.lines.Line2D instance at 0xb7b9144c>] In [7]: show()

這將出現一個顯示b的圖像的窗口,如果你啟動ipython時使用--pylab的話show命令是不必要的。

我注意到如果我把b的0頻移動到中間看起來更好。我可以通過連接b的后半部分和前半部分來實現,但是我記不清concatenate的語法了:

In [8]: concatenate? Type: builtin_function_or_method Base Class: <type 'builtin_function_or_method'> String Form: <built-in function concatenate> Namespace: Interactive Docstring:concatenate((a1, a2, ...), axis=0)Join arrays together.The tuple of sequences (a1, a2, ...) are joined along the given axis(default is the first one) into a single numpy array.Example:>>> concatenate( ([0,1,2], [5,6,7]) )array([0, 1, 2, 5, 6, 7]) In [9]: f=arange(-500,500,1) In [10]: grid(True) In [11]: plot(f,abs(concatenate((b[500:],b[:500])))) Out[11]: [<matplotlib.lines.Line2D instance at 0xb360ca4c>] In [12]: show()

這得到了我想要的圖像。我可以使用交互控制上下移動和縮放圖片,并且為包含在出版物中產生postscript輸出(如果你想要學習更多繪圖知識,建議你閱讀matplotlib教程)。

運行腳本

當你一遍又一遍重復做著相同的工作,把一些命令保存在文件中并把它們作為腳本在ipython中運行將很有用。你可以使用”Ctrl-D”退出當前的ipython會話并且編輯ipython_log.py文件。當你想要執行這個文件中的指令時,你可以打開一個新的ipython會話輸入命令%run -i ipython_log.py。

當編輯一個腳本文件時,在ipython中嘗試一些命令也很方便。這將允許你在保存和運行之前,對一些簡單的情況逐行嘗試你的腳本。

一些關于導入(import)的筆記

如果你僅僅初學scipy和與其伴侶,以下的東西對你并不那么重要,不要太操心。但是當你開發一些大型的應用時最好記住它。

對交互工作(在ipython中)和一些小型的腳本使用from scipy import *沒什么。這樣將會有個優點就是所有的功能在當前命名空間都是立即可用的。然而,對大型的程序和軟件包來說,建議只導入你真正需要的函數和模塊。讓我們考慮這種情況:你(為了無論什么理由)想要比較numpy和scipy的fft函數。在你的腳本中你應這樣寫:

# import from module numpy.fft from numpy.fft import fft # import scipy's fft implementation and rename it; # Note: `from scipy import fft` actually imports numpy.fft.fft (check with # `scipy.fft?` in Ipython or look at .../site-packages/scipy/__init__.py) from scipy.fftpack import fft as scipy_fft

這個優勢就是,當你查看代碼時,你可以顯式的知道你在導入什么,代碼便因此變得清晰和可讀。而且,這通常比通過import *導入所有東西更快,特別是如果你是從一個像scipy一樣特別大的庫中導入。

然而,如果你使用許多不同的numpy函數,如果你顯式導入每一個函數導入聲明將變得非常長。但是你可以導入整個包來代替使用import *。

from numpy import * # bad from numpy import abs, concatenate, sin, pi, dot, amin, amax, asarray, cov, diag, zeros, empty, exp, eye, kaiser # very long import numpy # good # use numpy.fft.fft() on array 'a' b = numpy.fft.fft(a)

沒關系,因為通常import numpy非常快。另一方面,scipy相當大(有很多子包)。因此from scipy import *第一次導入可能非常慢(所有接下來的導入聲明將會更迅速地執行,因為實際上沒有再次導入)。這是為什么當你導入scipy時子包的導入默認被禁止(像scipy.fft),這樣它才能像import numpy一樣快。如果你想使用比如說scipy.fft,你不得不顯式的導入它(這無論如何是個好的想法)。如果你想要一次加載所有子包,你將不得不import scipy; scipy.pkgbuild()。使用ipython的交互會話,你可以通過scipy profile調用它(ipython -p scipy),為你讀取scipy的配置文件(通常在~/.ipython/ipythonrc-scipy)和加載所有scipy。對在即時交互環境使用scipy和matplotlib繪圖,你可以用像這樣的命令ipython --pylab -p scipy。


from: http://reverland.org/python/2012/08/24/scipy/#scipynumpymatplotlib

總結

以上是生活随笔為你收集整理的SciPy入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。