1. 程式人生 > >Python-Numpy常用函式總結

Python-Numpy常用函式總結

1、np.arange(x,y,z)
建立公差為z的等差一維陣列
例:
b = np.arange(1,5,1)

b:[1 2 3 4]


2、np.meshgrid(x,y)

x=np.array([1,2]),y=np.array([3])

例:
b2_1,b2_2=np.meshgrid(x,y)

b2_1:     [[1 2 3] [1 2 3][1 2 3]] 

b2_2:     [[1 1 1][2 2 2][3 3 3]]


3、陣列維度
np.ndim(b2_1)
b2_1:2

4、各個維度的尺度
np.shape(b2_1)
b2_1:(3,3)

5、陣列元素個數
np.size(b2_1)
b2_1:9

6、生成全1陣列
np.ones(shape)

生成int32型的全0 
np.zeros((shape), dtype = np.int32) 


例:
np.ones((2,3))

[[ 1.  1.  1.]
 [ 1.  1.  1.]]

np.full(shape, val): 生成全為val 
np.eye(n) : 生成單位矩陣

例:
np.full((2,3),2)

[[2 2 2]
 [2 2 2]]

np.eye(2)

[[ 1.  0.]
 [ 0.  1.]]

7、np.ones_like(a) : 按陣列a的形狀生成全1的陣列 
np.zeros_like(a): 同理 
np.full_like (a, val) : 同理

8、生成一個包含四個元素的陣列
np.linspace(1,10,4)
[  1.   4.   7.  10.]
np.linspace(1,10,4, endpoint = False)
[ 1.    3.25  5.5   7.75]

9、陣列拼接:concatenate()
x=np.array([1,2,3])
y=np.array([1,2,3])
np.concatenate((x,y),axis=0)

[1 2 3 1 2 3]

10、np.reshape(shape) : 不改變當前陣列,依shape生成 
np.resize(shape) : 改變當前陣列,依shape生成 
np.swapaxes(ax1, ax2) : 將兩個維度調換 
np.flatten() : 對陣列進行降維,返回摺疊後的一位陣列

例:
b=[[1 2 3]
 [1 2 3]
 [1 2 3]]
c = np.reshape(b,(1,9))
c =[[1 2 3 1 2 3 1 2 3]]

x1=np.random.randn(2,3)
print(x1)
x1.resize(3,2)
print(x1)

[[-0.58306661  0.95827659 -0.88354229]
 [ 1.003802    1.45425069  0.23221529]]
[[-0.58306661  0.95827659]
 [-0.88354229  1.003802  ]
 [ 1.45425069  0.23221529]]


arr = np.arange(16).reshape((2,2,4))
print(arr)
print(arr.swapaxes(1,2)


[[[ 0  1  2  3]
  [ 4  5  6  7]]
 [[ 8  9 10 11]
  [12 13 14 15]]]


[[[ 0  4]
  [ 1  5]
  [ 2  6]
  [ 3  7]]
 [[ 8 12]
  [ 9 13]
  [10 14]
  [11 15]]]


a = np.array([[1,2], [3,4]])
print(a.flatten()) #按行的方向排列
print(a.flatten('F')) #按列的方向排列

[1 2 3 4]
[1 3 2 4]


11、np.abs(a) np.fabs(a) : 取各元素的絕對值 
np.sqrt(a) : 計算各元素的平方根 
np.square(a): 計算各元素的平方 
np.log(a) np.log10(a) np.log2(a) : 計算各元素的自然對數、10、2為底的對數 
np.ceil(a) np.floor(a) : 計算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整) 
np.rint(a) : 各元素 四捨五入 
np.modf(a) : 將陣列各元素的小數和整數部分以兩個獨立陣列形式返回 
np.exp(a) : 計算各元素的指數值 
np.sign(a) : 計算各元素的符號值 1(+),0,-1(-) 

np.maximum(a, b) np.fmax() : 比較(或者計算)元素級的最大值 
np.minimum(a, b) np.fmin() : 取最小值 
np.mod(a, b) : 元素級的模運算 
np.copysign(a, b) : 將b中各元素的符號賦值給陣列a的對應元素


12、np.random.rand(d0, d1, …,dn) : 各元素是[0, 1)的浮點數,服從均勻分佈 
np.random.randn(d0, d1, …,dn):標準正態分佈 
np.random.randint(low, high,( shape)): 依shape建立隨機整數或整數陣列,範圍是[ low, high) 
np.random.seed(s) : 隨機數種子


np.random.shuffle(a) : 根據陣列a的第一軸進行隨機排列,改變陣列a 
np.random.permutation(a) : 根據陣列a的第一軸進行隨機排列, 但是不改變原陣列,將生成新陣列 
np.random.choice(a,[, size, replace, p]) : 從一維陣列a中以概率p抽取元素, 形成size形狀新陣列,replace表示是否可以重用元素,預設為False。


x2 = np.random.rand(3,3)
print(x2)
x3=np.random.randn(3,3)
print(x3)
x4=np.random.randint(1,5,(3,3))
print(x4)
np.random.shuffle(x4)
print(x4)
x5=np.random.permutation(x2)
print(x5)
x6=np.random.randint(100,200,(8,))
x7=np.random.choice(x6,(2,2),replace=False)
print(x7)


[[ 0.49135165  0.69267735  0.7785192 ]
 [ 0.91731843  0.79043115  0.17239938]
 [ 0.75339545  0.48626669  0.82104145]]
[[-0.13574689  1.08502621  0.23511304]
 [-0.97468531  0.41565717  0.21193764]
 [-0.38974451  1.70751878 -0.32619712]]
[[2 1 1]
 [2 1 1]
 [4 1 3]]
[[2 1 1]
 [4 1 3]
 [2 1 1]]
[[ 0.49135165  0.69267735  0.7785192 ]
 [ 0.75339545  0.48626669  0.82104145]
 [ 0.91731843  0.79043115  0.17239938]]
[[179 141]
 [141 179]]


13、np.random.uniform(low, high, size) : 產生均勻分佈的陣列,起始值為low,high為結束值,size為形狀 
np.random.normal(loc, scale, size) : 產生正態分佈的陣列, loc為均值,scale為標準差,size為形狀 
np.random.poisson(lam, size) : 產生泊松分佈的陣列, lam隨機事件發生概率,size為形狀 
 
14、sum(a, axis = None) : 依給定軸axis計算陣列a相關元素之和,axis為整數或者元組 
mean(a, axis = None) : 同理,計算平均值 
average(a, axis =None, weights=None) : 依給定軸axis計算陣列a相關元素的加權平均值 
std(a, axis = None) :同理,計算標準差 
var(a, axis = None): 計算方差 
min(a) max(a) : 計算陣列a的最小值和最大值 
argmin(a) argmax(a) : 計算陣列a的最小、最大值的下標(注:是一維的下標)
unravel_index(index, shape) : 根據shape將一維下標index轉成多維下標 
ptp(a) : 計算陣列a最大值和最小值的差 
median(a) : 計算陣列a中元素的中位數(中值)
cumsum()    #累計和
cumprod()   #累計積


np.gradient(a) : 計算陣列a中元素的梯度,f為多維時,返回每個維度的梯度 
離散梯度: xy座標軸連續三個x軸座標對應的y軸值:a, b, c 其中b的梯度是(c-a)/2 
而c的梯度是: (c-b)/1


當為二維陣列時,np.gradient(a) 得出兩個陣列,第一個陣列對應最外層維度的梯度,第二個陣列對應第二層維度的梯度。


14、矩陣乘法:
x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6,23],[-1,7],[8,9]])


r=np.dot(x, y)#注意:x的列數要等於y的行數
print(r)


[[ 28  64]
 [ 67 181]]


15、b=np.c_[np.array([1,2,3]),np.array([4,5,6])]
print(b)


[[1 4]
 [2 5]
 [3 6]]


16、將多維陣列轉化為一維陣列
x = np.array([[1,2,3],[4,5,6]])
print(x.ravel())
[1 2 3 4 5 6]


17、random函式
random.rand(3,2)返回3*2的array型別的陣列,陣列值為隨機值
random.randn()返回一個樣本,具有標準正態分佈的數值
random.randint(2,size=10)返回[0,2)半開區間的隨機整數,有十個元素
random.random_integers(5,size=(3,4))返回[0,5]閉區間的隨機整數,維度為3*2
random.random_sample(size=(3,2))返回半開區間[0.0,1.0)的隨機浮點數
random.random(size=(3,2))和randomz_sample()函式完全一樣
random.ranf(size=(3,2))和randomz_sample()函式完全一樣
random.sample(size=(3,2))和randomz_sample()函式完全一樣
random.choice(a,size,replace,p)生成一個隨機樣本,從一個給定的一維陣列
random.bytes(length)返回隨機位元組


排序:
random.shuffle(x)修改序列,改變x的自身內容,類似洗牌。
permutation(x)返回一個隨機序列,不修改x的內容