numpy学习笔记(莫烦python)
import numpy as np
numpy屬性
array = np.array([[1,2,3],[2,3,4]])
print(array)
print(‘number of dim’,array.ndim)
print(‘shape:’,array.shape)
print(‘size’,array.size)
numpy的創建array
創建數組
a = np.array([2,23,4])
print(a)
指定數據
a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
a = np.array([2,23,4],dtype=np.int32)
print(a.dtype)
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
創建特定的數據
矩陣
a = np.array([[2,23,4],[2,32,4]])
print(a)
全零數組
a = np.zeros((3,4))
print(a)
創建全一數組,同時指定這些特定數據的dtype
a = np.ones((3,4),dtype=np.int)
a
創建全空數組,其實每個值都是接近零的數
a = np.empty((3,4))
a
用arange創建連續數組
a = np.arange(10,20,2)
a
用reshape改變數據的形狀
a = np.arange(12).reshape((3,4))
a
用linspace創建線段型數據
a = np.linspace(1,10,20)
a
a = np.linspace(1,10,20).reshape((5,4))
a
Numpy基礎運算1
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
a,b
numpy的幾種基本運算
c=a-b
c
c=a+b
c
c=a*b
c
#乘方
c=b**2
c
數學工具,三角函數
c=10*np.sin(a)
c
除了函數應用外,在腳本中對print函數進行一些修改可以進行邏輯判斷
print(b<3)
此時由于進行邏輯判斷,
返回的是一個bool類型的矩陣,即對滿足要求的返回True,不滿足的返回False。
上述程序執行后得到的結果是[True True True False]。 需要注意的是,
#如果想要執行是否相等的判斷, 依然需要輸入 == 而不是 = 來完成相應的邏輯判斷。
#上述運算均是建立在一維矩陣,即只有一行的矩陣上面的計算,
如果我們想要對多行多維度的矩陣進行操作,需要對開始的腳本進行一些修改:
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
稍顯不同的是,Numpy中的矩陣乘法分為兩種,
#其一是前文中的對應元素相乘,
#其二是標準的矩陣乘法運算,
#即對應行乘對應列得到相應元素:
矩陣乘法
c_dot = np.dot(a,b)
print(c_dot)
另一種dot的表示方法
c_dot_2 = a.dot(b)
print(c_dot_2)
sum(),min(),max()的使用
import numpy as np
a=np.random.random((2,4))
print(a)
np.sum(a)
np.min(a)
np.max(a)
查找運算
如果你需要對行或者列進行查找運算,
就需要在上述代碼中為 axis 進行賦值。
當axis的值為0的時候,將會以列作為查找單元,
當axis的值為1的時候,將會以行作為查找單元。
print(“a =”,a)
print(“sum =”,np.sum(a,axis=1))
print(“min =”, np.min(a,axis=0))
print(“max =”,np.max(a,axis=1))
numpy基礎運算2
有關索引的運算
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(np.mean(A))
print(np.average(A))
模仿dot()的使用法則,mean()還有另一種寫法
print(A.mean())
同樣的,可以寫出求解中位數的函數
#print(A.median()) # 用不了?
np.median(A)
和matlab中的cumsum()累加函數類似,Numpy中也具有cumsum()函數
print(np.cumsum(A))
累差運算的函數
print(np.diff(A))
#每一行中后一項與前一項之差。故一個3行4列矩陣通過函數計算得到的矩陣便是3行3列的矩陣。
nonzero()函數
print(np.nonzero(A))
#這個函數將所有非零元素的行與列坐標分割開,重構成兩個分別關于行和列的矩陣。
#wo們可以對所有元素進行仿照列表一樣的排序操作,
#但這里的排序函數仍然僅針對每一行進行從小到大排序操作:
import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.sort(A))
矩陣的轉置有兩種表示方法
print(np.transpose(A))
print(A.T)
特別的,numpy里面有clip()函數,例子如下
print(A)
print(np.clip(A,5,9))
Numpy索引
一維索引
類似 a[2] 的索引方法
import numpy as np
A = np.arange(3,15)
print(A[3])
print(A[0])
此時我們將矩陣轉化成二維的,然后進行同樣的操作
A = np.arange(3,15).reshape((3,4))
print(A[2])
此時對應的實際上是矩陣A從第三行(從0開始算)開始的所有元素
二維索引
A = np.arange(3,15).reshape((3,4))
A
print(A[1][1])
其他表示方法
print(A[1,1])
在python的list中,我們可以利用 : 對一定范圍內的元素進行切片操作,
在numpy中我們依然可以給出相應的方法
print(A[1,1:3])
這一表示形式即針對第二行中第2到第4列元素進行切片輸出(不包含第4列)。
此時我們適當的利用for函數進行打印
for row in A:
print(row)
此時他會逐行進行打印操作
如果想逐列進行打印,就需要稍微變化一下
for column in A.T:
print(column)
最后說一個關于逐代輸出的問題
import numpy as np
A = np.arange(3,15).reshape(3,4)
print(A.flatten())
for item in A.flat:
print(item)
#這一腳本中的flatten是一個展開性質的函數,將多維的矩陣進行展開成1行的數列。
而flat是一個迭代器,本身是一個object屬性
numpy array合并
np.vstack() 上下合并
import numpy as np
A = np.array([1,1,1])
A
B = np.array([2,2,2])
B
print(np.vstack((A,B)))
#vertical stack本身屬于一種上下合并,即對括號中的兩個整體進行對應操作。此時我們對組合而成的矩陣進行屬性探究:
C = np.vstack((A,B))
print(A.shape, C.shape)
np.hstack() 左右合并
D = np.hstack((A,B))
print(D)
print(A.shape,D.shape)
np.newaxis() 轉置操作
#說完了array的合并,
#我們稍稍提及一下前一節中轉置操作
#,如果面對如同前文所述的A序列,
#轉置操作便很有可能無法對其進行轉置(因為A并不是矩陣的屬性),
#此時就需要我們借助其他的函數操作進行轉置:
print(A[np.newaxis,:])
print(A[np.newaxis,:].shape)
print(A[:,np.newaxis])
print(A[:,np.newaxis].shape)
結合著上面的知識,我們把它綜合起來:
import numpy as np
A = np.array([1,1,1])[:,np.newaxis]
A
B = np.array([2,2,2])[:,np.newaxis]
B
C = np.vstack((A,B))
C
D = np.hstack((A,B))
D
print(D)
print(A.shape,D.shape)
np.concatenate() 合并多個矩陣或序列
#當你的合并操作需要針對多個矩陣或序列時,借助concatenate函數可能會讓你使用起來比前述的函數更加方便:
C = np.concatenate((A,B,B,A),axis=0)
C
print?
D = np.concatenate((A,B,B,A),axis=1)
D
print(D)
#axis參數很好的控制了矩陣的縱向或是橫向打印,相比較vstack和hstack函數顯得更加方便。
Numpy array 分割
創建數據
import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
縱向分割
print(np.split(A,2,axis=1))
C,D = np.split(A,2,axis=1)
C,D
橫向分割
print(np.split(A,3,axis=0))
錯誤的分割
范例的Array只有4列,只能等量對分,因此輸入一下程序代碼后python會報錯
print(np.split(A,3,axis=1))
為了解決這種情況,我們會有下面這種方式
不等量的分割
print(np.array_split(A,3,axis=1))
其他的分割方式
print(np.vsplit(A,3)) # #等于 print(np.split(A, 3, axis=0))
print(np.hsplit(A,2))
Numpy copy & deep copy
= 的賦值方式會帶有關聯性
首先import numpy 并建立變量,給變量賦值
import numpy as np
a = np.arange(4)
b = a
c = a
d = b
改變a的第一個值,b,c,d,的第一個值也會隨之改變
a[0]=11
print(a)
確定b, c, d, 與 a 是否相同
b is a
c is a
d is a
同樣,改變d的值,a,b,c也會改變
d[1:3] = [22,33]
print(a)
print(b)
print?
copy的賦值方式沒有關聯性
b = a.copy()
print(b)
a[2] = 44
print(a)
print(b)
總結
以上是生活随笔為你收集整理的numpy学习笔记(莫烦python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置中文字符集
- 下一篇: printf输出颜色和ANSI控制码(高