***numpy學習筆記 收集者:keengle(
最近在學習scipy。在理解scipy之前,numpy作為scipy基本的模組之一,是不得不去理解掌握的。先總結一下numpy部分的內容吧。接下來學習scipy,最後是pylab和matplotlib。
介紹numpy是乙個python的擴充套件模組,通過使用numpy,我們可以進行科學計算。numpy提供了矩陣、線性代數、傅利葉變換等的解決方法。
numpy包含:
· n維矩陣物件
· 線性代數運算功能
· 傅利葉變換
· fortran**整合的工具
· c++**整合的工具
numpy提供了兩種基本的物件:ndarray(n-dimensional array object)和 ufunc(universal function object)。前者為乙個n維的矩陣在python中的儲存物件,它是一類同型別的物件(如int、bool、unicode、str等等)的集合。
· python 2.5:
· numpy: 使用
安裝好後,首先引入模組:
>>> from numpy import *
建立乙個矩陣
>>> a=array([[1,2,3],[4,5,6]])
>>> a.shape
(2, 3)
>>> b=arange(15);print b
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
>>> b.reshape(3,5)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
可以看到,a是2行3列的矩陣。通過arange方法,可以得到乙個1維的陣列。然後我們可以通過reshape方法改變它的維度。
>>> c=zeros((4,5));print c
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
>>> d=ones((5,7));print d
[[ 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1.]]
>>> e=add(c,arange(20).reshape(4,5))
>>> f=dot(e,d);print f
[[ 10. 10. 10. 10. 10. 10. 10.]
[ 35. 35. 35. 35. 35. 35. 35.]
[ 60. 60. 60. 60. 60. 60. 60.]
[ 85. 85. 85. 85. 85. 85. 85.]]
使用zeros可以生成乙個零矩陣。同理,用ones可以生成值全部為1的矩陣。我選擇了乙個4*5的矩陣e,和乙個5*7的矩陣d做點乘。最後得到f矩陣。再舉乙個更加明顯的例子:
>>> a=arange(5);print a
[0 1 2 3 4]
>>> b=arange(5).reshape(5,1);print b
[[0]
[1][2]
[3][4]]
>>> print dot(a,b)
[30]
點積的效果更加明顯了。
ndarray的幾個常用屬性:
· shape: 代表乙個array的形態,是乙個向量還是乙個矩陣,抑或是乙個更複雜的向量組。
· ndim: 代表這個array的維度
· size: 在array中擁有的元素數量
· itemsize: 這個array中每乙個元素所需要佔的位元組數
· nbytes: 這個array的總位元組數(=itemsize*size)
· real: 代表乙個array中所有元素的實數部分
· imag: 同理,代表乙個array中所有元素的虛數部分
· flat: 將這個array整理成一維的,可以索引的一系列的元素組合。它實際上是通過iterator實現的,我們可以通過for x in array.flat來取得到所有的元素
· t: 矩陣轉置,同transpose()方法
一些比較有用的方法:
· tolist(): 將array轉化成乙個python中的list物件
· item(*args): 取得某一位置的元素
· dump(file): 將這個物件序列化至檔案。同cpickle中的dump作用
· dumps(): 將序列化的結果通過字串加以輸出
一些關於array的形態操作:
· reshape(): 改變array的形態
· resize(): 也是改變array的形態。不同的是,resize是直接修改這個物件的,而reshape則會生成乙個新的物件
· transpose(): 這個就是矩陣的轉置操作啦
· swapaxes(): 將n個維度中任意兩個維度(座標軸)進行調換
· flatten(): 複製乙個一維的array出來
還有一些關於array的運算操作:
· max():取得所有元素中的最大值
· min():取得最小值。還有一點值得說,就是max、min這些函式都可以針對某一座標軸(具體維度)進行運算,例如array.max(axis=0),就在0座標上求最大值
· sum():求和
· cumsum():求累計和
· prod():求所有元素之積
· cumprod():求累計積
· all():如果所有元素都為真,那麼返回真;否則返回假
· any():只要有乙個元素為真則返回真
· mean():求平均數
總結了一部分,更多的方法還需要我們使用中體驗。
Spring學習筆記 入門篇
說明 本章筆記是一些針對入門的簡單步驟的筆記,入門的同學不需要知道太多關於spring內部原理的東西。還有一些犄角旮旯的瑣碎知識,如果你面試會遇到,背背就可以了。1.spring是面向介面程式設計的。可忽略 2.spring2個核心 ioc di 和aop。ioc di 也叫控制反轉。是解決類之間的...
Swi Prolog學習筆記(入門篇)
首先介紹乙個學習swi prolog 和amzi prolog很靠譜的中文 然後介紹一下我在學習時發現的prolog和其他程式語言的不同之處。prolog是邏輯程式語言,在解決邏輯推理問題是有很明顯的優勢。它的解決問題的策略是基於列舉法的,所以返回結果很可能不唯一。進行prolog程式設計時重要的是...
UEFI學習筆記 入門篇
efi boot 共分為6 個主要階段 sec,pei,dxe,ipl,bds,rt 在phoenix tiano 架構裡,這些階段涉及到的主要檔案如下 1 sec phase 這個階段使用 cache 來當作memory 用,在sec 完畢後,c環境已經ok。lseccore.inf lflat3...