numpy常見用法總結

前言

NumPy 是一個 Python 包。 它代表 “Numeric Python”。 它是一個由多維數組對象和用於處理數組的例程集合組成的庫,主要用來處理數組和矩陣。NumPy調用了大量的用C語言編寫的算法庫,使得其可以直接操作內存,不必進行Python動態語言特性所含有的前期類型檢查工作,從而大大提高了運算速度。

這篇文章介紹了numpy最常用的一些用法,敲一遍下面的代碼就算入門了。

導入

impotrt numpy as np

向量矩陣

vector = np.array([5, 10, 15, 20])  # 一維向量

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 矩陣
print(matrix)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
 
print(matrix.ndim) # 維度
2

print(matrix.shape) # 形狀
(3, 3)

print(matrix.size) # 有多少元素
9

print(matrix.dtype)  # 向量中的數據類型
int32

切片

vector = np.array([5, 10, 15, 20])  # 一維向量
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 矩陣

print(matrix[0,0])  # >> 5 

print(vector[0:3])  # >> [5 10 15]  0~3表示0 1 2

print(matrix[:,1])  # >> [3 5 8] 此處冒號代表所有行

print(matrix[:,0:2])  # >> [[1 2], [4 5], [7 8]]

判斷操作

vector = np.array([5, 10, 15, 20])  # 一維向量
print(vector == 10)
([False, True, False, False])

數據類型轉換

vector = np.array([1, 2, 3])  # 數據類型是
print(vector.dtype)
int32

vector = vector.astype(float)  # 類型轉換
print(vector.dtype)
float64

最值

vector.min()  # 最大值

vector.max()  # 最小值

對整行、列操作

matrix.sum(axis = 1)  # 對行求和

matrix.sum(axis = 0)  # 對列求和

range

range(stop) #或下面的
range(start, stop[, step]) #返回list對象,只能有整數
range(0, 5) 即從05,但不包括5,即0 1 2 3 4
range(0, 10, 2) 即從010,但不包括10,步幅爲2,
輸出爲:1, 3, 5, 7, 9

arange

arange([start,] stop[, step,], dtype=None) 
#返回ndarray對象,numpy中的函數,與range相比,可以有浮點數

np.arange(10, 30, 5)  # >> array([10, 15, 20 25]) 從10到30 間隔5 注意 30取不到

np.arange(15)  # >> [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
data = np.arange(20).reshape(5,4)  
print(data)
# 會輸出:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]

range(data.shape[0])  # >> range(0, 5) 即從0到5,但不包括5,即0 1 2 3 4
range(data.shape[1])  # >> range(0,4)即從0到4,但不包括4,即 0 1 2 3 

reshape

a = np.arange(15).reshape(3, 5)  # array([0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14])

a.reshape(3,-1)  # 確定了3行,-1是讓電腦自己算有幾列

初始化矩陣

np.zeros((3,4))  # 3行4列的元素全爲0的矩陣+

np.ones((5,6))  # 5行6列的元素全爲1的矩陣 

np.ones((2,3,4), dtype=np.int32)  # 默認是float類型,現在將類型換爲整數

np.random.random((2,3))  # 一個矩陣,元素是從-1到+1之間的隨機值

矩陣乘法

dot

①一維,計算內積,得到一個值

②多維,滿足矩陣相乘

import numpy as np
A.dot(B)  # 正常矩陣相乘
np.dot(A,B)  # 同上

outer

①對於多維向量,全部展開變爲一維向量

②第一個參數表示倍數,使得第二個向量每次變爲幾倍。

③第一個參數確定結果的行,第二個參數確定結果的列

import numpy as np  

x1 = [1,2,3]  
x2 = [4,5,6]  
outer = np.outer(x1,x2)  
print outer  

[[ 4  5  6]       #1倍  
 [ 8 10 12]       #2倍  
 [12 15 18]]      #3倍 



x1 = [[1,2],[3,4]]  
x2 = [[1,1],[1,1]]  
outer = np.outer(x1,x2)  
print outer  

[[1 1 1 1]        #1倍  
 [2 2 2 2]        #2倍  
 [3 3 3 3]        #3倍  
 [4 4 4 4]]       #4倍

multiply和*

①對應位置相乘

②兩個參數和結果的shape應該一致

import numpy as np
A*B  # 點乘(對應元素相乘)
np.multiply(A, B) # 同上

矩陣拼接、分割

np.hstack((a,b))  # 矩陣a和b橫着拼

np.vstack((a,b))  # 矩陣a和b縱着拼

np.hsplit(a,3) # 矩陣a平均切分爲3份

np.hsplit(a,(3,4))  # 矩陣a 從3處切一下,從4處切一下

np.split(GG,2,axis=1)
np.split(GG,3,axis=0)
# 若不能均分爲3份,上面兩個語句會出錯,用下面這個就ok了
print(np.array_split(A,3,axis=1)) 

複製

a = np.arange(12)

b = a # a和b是一個位置的不同名字,改變b, a也就跟着變了

b.shape = 3,4  # a.shape也就變成了 3,4

c = a.view()  # c和a指向不同位置,但是共用同一套值

d = a.copy()  # d和a互不影響

np.grgmax

ind = data.argmax(axis=0)  # 每一列中最大元素的索引值
data_max = data[ind, range(data.shape[1])]  # 找出每一列的最大值

ind1 = data.grgmax(axis=1)  # 每一行中最大元素的索引值
# data[行號,列號] ,現在是找每行的最大值,ind裏是每行的最大值的位置,即列號
data_max = data[range(data.shape[0]),ind]  # 找出每一行的最大值 

np.tile

a = np.array([[3,1],[2,1]])
b = np.tile(a, (2,3))  # 將a的行的元素個數擴大兩倍,列的元素個數擴大3倍
print(a)
print(b)

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

np.linspace

b = np.linspace(1, 10, 5) # 線段 起始、結束、幾段
print(b)

[ 1.    3.25  5.5   7.75 10.  ]

排序

a.sort()  # a中元素從小到大排序

a.sort(reverse=True)  # 從大到小排序

j = a.argsort(a) # a中元素從小到大排序的序列號
k = a[]
a[j]  # 可以得到排序後的結果

其它

A = np.arange(2,14).reshape([3,4])
print(A)
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
 
print(np.argmax(A)) # 最大值索引
11

print(np.mean(A)) # 平均值
7.5

print(np.average(A)) # 平均值
7.5

print(np.median(A)) # 中位數
7.5

print(np.cumsum(A)) # 每個元素是之前所有元素相加的和
[ 2  5  9 14 20 27 35 44 54 65 77 90]

print(np.diff(A)) # 相鄰兩個元素之間的差
[[1 1 1]
 [1 1 1]
 [1 1 1]]

print(np.clip(A,5,9)) # 小於5變爲5,大於9變爲9
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章