Numpy是處理矩陣、數組的一個工具,下面來看一下基本操作:
np.array(),直接將輸入的數組轉換成矩陣,打印一下,屬於ndarray,n維矩陣系列。
打出維數:array.ndim
打出形狀:array.shape
打出大小:array.size
1.創建array
區別在哪?換個方式:
np.array把原來的List,帶","的List換成了不帶逗號的ndarray,列表換成了數組,後面是不帶逗號的。
np.array()內部關鍵字:
定義類型:dtype = np.int64,
dtype = np.int32
dtype = np.float64(精確,佔空間)
dtype = np.float32(節省空間)
......
多出來的小數點,float類型。
2.np.zeros((x,y))
x,行數,y,列數
3行4列的全0矩陣。
3.np.ones((x,y))
同上面一樣:
3行4列的全1矩陣。
4.np.arange(起始位,終止位,步長)
5.np.reshape((x,y))
重新規劃矩陣形狀,比如生成一個1行12列的矩陣,轉換成3行4列的矩陣:
這裏看到,首先arange,傳入一個參數時,默認x=0,步長爲1,
其次,np.xxx().xxxx()前後按順序來執行命令
6.numpy的簡單運算
簡單的+,-:
簡單的*與**:
**代表冪指數,
三角函數:
調用np.sin() np.cos(),矩陣傳入括號內部。
其他函數類似。
7.輸出布爾值矩陣
比如,判斷一個矩陣中的元素是否小於某個數,輸出的也應是個布爾值的矩陣:
8.元素乘與矩陣乘
矩陣間的成法有兩種,一種是元素之間對應相稱,另一種是矩陣相乘:
分別爲c = a*b, c = np.dot(a,b)
爲了方便,轉換成2*2矩陣形式:
9.0-1的隨機矩陣
np.random.random((x,y))
10.矩陣最大、最小、和
np.sum() 查看矩陣內部和
np.min() 查看矩陣內部最小值
np.max() 查看矩陣內部最大值
內部關鍵字:
axis: axis = 1,逐行計算,返回逐行的結果矩陣,axis = 0 逐列計算,返回逐列結果矩陣
1是行,0是列。
11.矩陣索引
np.argmin(),索引矩陣最小值所在位置
這裏返回的,是0位,與7位,不是數值。
也可以根據a[x,y] a[x]/a[x,:],a[:,y] ,a[x,a:b],a[a:b,y]
(: 單獨一個冒號代表所在行或列的所有值)
如:a[:,3]代表第四列的所有值
a[x,y]:
a[x]a[x,:]:
這個是可以直接賦值的,創建一個新對象:
a[:,1]:
a[x,a:b] 第x+1行,的第a+1到b的值
12.平均值,中位數
np.mean() 平均值,
np.median(),中位數
13.累加
np.cumsum(),
14.逐位差
np.diff(),逐個計算兩個相鄰的差,返回矩陣
15.倒序
倒序,起始位置與終止位置互換,步長爲 -1
16.轉置
np.transpose()
[ ].T
以前的圖片旋轉,內部調用的也是這個,圖片上多附(角度)
還有一種,直接加T,可直接用於乘法,
17.區間修剪,np.clip()
在矩陣中,在某個區間內,規定最大值,最小值,剪掉沒有交集的部分
np.clip(a,a_min,a_max,out = None)
矩陣a 最大值 11,最小值4,現在規定剪刀的最大值爲9,最小值爲4,那麼,矩陣中超過9的一律剪平,全置爲9,4剛好爲最小
這次,最小值爲3,矩陣最小值爲4,沒有什麼可剪的。保持最小值爲4
18.循環
逐行輸出:for row in a :
print(row)
逐行輸出列:for row in a.T:
print(row)
逐個元素輸出,先看下np.flatten()
可以說flatten等於reshape的**-1,-1次方。
Ok,現在逐個輸出元素:
19.合併
np.vstack((a,b)) a,b上下合併
np.hstack((a,b)) a,b左右合併
np.concatenate((a,b,b,a),axis = 0/1),多個數列合併
20.數列與矩陣控制
始終區分不開什麼是數列,什麼是矩陣,
個人理解就是,一個[ ]裏面放數字叫做數列,兩個[ ],[ ]裏面放數字,那叫做兩個數列
數列外邊再套個[ ],如[ [ ] ],這叫做一行矩陣,[[ ] [ ] ]這叫做,1行2列矩陣
那麼如何把一行的數列轉換成一行矩陣呢?
提供一個方法,創建一個維度,newaxis,
a[newaxis,:] newaxis這個關鍵字,直接就是在所在的位置,x或y創建了一個維度,對於一行數列,在行的位置上創建一個維度,那結果是一行矩陣,如果在列位置上創建一個維度,那結果是一列矩陣,又如果,行和列都創建了一個維度,那麼此行數列作爲一組數列保存在創建的新矩陣中。
簡單的方法,.reshape(),直接操作維度。
21.矩陣分割
np.split(ary,indices_or_sections,axis = 0/1)
axis = 1,把a矩陣的行分成2份
如果axis = 0:
有餘數,報錯,不能夠平分列,把2換成3,把列分成三份:
另一種方法:np.vsplit() 列分割v,
np.hsplit() 橫分割h
22.賦值與複製
在Python中,對變量的賦值,等號兩邊完全是一致的,包括變量的Id:
也就是說,改變後來的變量,對前面的變量都會有影響
看下np.copy():
對d中元素進行操作:
換個方式