Python安裝完Numpy,SciPy和MatplotLib後,可以成為非常犀利的科研利器。網上關於這三個庫的安裝都寫得非常不錯,但是大部分人遇到的問題並不是如何安裝,而是安裝好後因為配置不當,在使用時總會出現import xxx error之類的錯誤。我也是自己摸索了很久才發現如何去正確配置的。 ...
Python安裝完Numpy,SciPy和MatplotLib後,可以成為非常犀利的科研利器。網上關於這三個庫的安裝都寫得非常不錯,但是大部分人遇到的問題並不是如何安裝,而是安裝好後因為配置不當,在使用時總會出現import xxx error之類的錯誤。我也是自己摸索了很久才發現如何去正確配置的。下麵就詳細說下安裝和配置的過程。
1.安裝Python,這裡選擇2.7還是3.4都行,不過推薦使用2.7,畢竟現在的教程大部分還是基於2.7的,3.4跟2.7的語法還是略有不同,為了避免語法錯誤的麻煩,還是推薦大家使用2.7。下載地址為:https://www.python.org/downloads/
2.下載Numpy,SciPy,MatplotLib這三個庫的exe,註意,這裡用的是exe,因為MatplotLib的使用需要以Numpy的支持,所以最好先裝NumPy再裝MatplotLib。下載地址:
- NumPy: http://sourceforge.net/projects/numpy/files/NumPy/1.9.2/
- SciPy: http://sourceforge.net/projects/scipy/files/scipy/0.15.1/
- MatPlotLib: http://matplotlib.org/downloads.html
其中NumPy和SciPy沒有32和64位的區別,MatPlotLib需要根據自己的系統選擇32位和64位的。再次提醒,這三個庫一定都要下載對應版本的exe。下載完成後一次安裝就是了,他們會自動找到你之前安裝好的Python所在的路徑的,一路Next到底就行了。
3.在第2步安裝完成後,可以在MatPlotLib的Examples頁面(http://matplotlib.org/examples/index.html)Copy代碼運行,發現一定會出錯。這裡出的錯,大體有三個:
- ImportError: matplotlib requires dateutil
- ImportError: matplotlib requires pyparsing
- No module name six
4.解決No module name six問題,解決辦法很簡單。把你的安裝路徑:Python27/Lib/site-packages/scipy/lib中的six.py,six.pyc,six.pyo三個文件拷貝到 你的安裝路徑:Python27/Lib/site-packages,這個問題就解決了。如何還不行,請記住這個地址(非常重要):http://www.lfd.uci.edu/~gohlke/pythonlibs/
然後下載這個文件:six‑1.9.0‑py2.py3‑none‑any.whl,下載後,利用CMD進入到該文件所在的目錄(DOS命令為:cd /d XX:/XXX/six‑1.9.0‑py2.py3‑none‑any.whl 把你自己的six文件的所在路徑按格式粘貼進DOS然後回車就行了),然後輸入命令:pip install six-1.9.0-py2.py3-none-any.whl,等DOS命令跑完,six不存在的問題就解決了。操作圖如下:
5.解決ImportError: matplotlib requires dateutil問題,方法和第4步一樣,下載python_dateutil‑2.4.2‑py2.py3‑none‑any.whl,然後pip install就可以解決該問題了。操作如下:
6.解決ImportError: matplotlib requires pyparsing問題,還如同之前一樣,下載pyparsing‑2.0.3‑py2‑none‑any.whl(選擇對應的版本,這裡有2和3的區別)然後利用pip install安裝好就可以了。操作如下:
到此,所有的配置就完成了,可以愉快地使用MatPlotLib進行科學畫圖和計算了。另外提醒一句,Python2.7和Python3.4不要共存,共存的時候安裝這幾個庫會出現莫名其妙地錯誤,怎麼也對不了,推薦只是用Python2.7,。最後,附帶一個來自MatPlotLib的畫圖代碼:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)
plt.show()