Numpy提供了高效存儲和操作密集數(shù)據(jù)緩存的接口。
先不管那些數(shù)據(jù)是如何處理的,我們只需要明白,數(shù)據(jù)是如何存儲的,就夠了。而知道數(shù)據(jù)如何存儲,那么其相應(yīng)的操作也變得非常明了。
PS:除要點外,都是解釋說明要點的,理解要點是核心,知道要點,在不看任何東西的前提條件下,能說出這個要點所包含的意義
核心:理解Python語言中,數(shù)據(jù)是如何被存儲和操作的。
第一點、
Python中的所有變量都是對象。
一個特性:Python中,“任何變量”可以賦“任何值”。
這是因為Python中的每一個數(shù)據(jù)都包含了除本數(shù)據(jù)以外的頭。定義如下
struct _longobject{
long ob_refcnt;//引用計數(shù),Python默默處理內(nèi)存的分配和回收
PyTypeObject *ob_type;//將變量的類型編碼
size_t ob_size;//指定接下來的數(shù)據(jù)成員的大小
long ob_digit[1];//包含我們希望Python變量表示的實際整型值
};
第二點、
Python中的列表,基于第一點,也是靈活的。
這造成了巨大的空間浪費,所以為了像C語言一樣,快速操作,Numpy提供相應(yīng)的庫。
第三點、
Python為解決這個問題,采用了array
array是一個包
array.array(列表或數(shù)據(jù))
如:array.array(a,[b,c,d,e]) a為類型數(shù)據(jù)碼
array形式:類型數(shù)據(jù)碼 + 列表(同一數(shù)據(jù))
第四點、
Numpy提供了類似于array的方法,更為簡潔,好用。
與array使用方法基本一致,但是可以使用許多方法。
第五點
Numpy中array提供的矩陣是array中列表中的列表。
即array()形式,內(nèi)部[]表示矩陣單個[]表示一行,即有三層形式。
array([
[1,2,3]
[1,2,3]
])
方法
剛才講述了原理,一定要搞清楚再思考方法的問題。因為方法是為原理服務(wù)的。
| 方法 | 效果 |
|---|---|
| np.ones((row, column), dtype=?) | 獲得1的row*column矩陣 |
| np.zeros((row, column)) | 獲得0的row*column矩陣 |
| np.full((row, column), 數(shù)) | 獲得'數(shù)'的row*column矩陣 |
| np.linspace(0,1,5) | 數(shù)組,0-1,五個數(shù)均勻分配(含0含1) |
| np.random.random((row, column)) | 獲得"random"的row*column矩陣 |
| np.random.normal(0,1,(row, column)) | 獲得"u 與 標(biāo)準(zhǔn)差"的row*column矩陣 |
| np.random, randint(0,10,(3,4)) | 獲得[0,10)區(qū)間隨機整型row*column數(shù)組 |
| np.eye(3) | 獲得單位矩陣(n*n) |
| np.empty(3) | 獲得未初始化矩陣n*n |