Numpy常用方法和使用技巧

2022-02-07 06:48:33 字數 4153 閱讀 9676

在python 3 環境下,根據切身使用numpy經驗,總結了一些小的常用的numpy方法和技巧。

1. np.array 可將序列物件(如列表和元包)轉換為陣列,可以生成一維或多維陣列,生成多維陣列時要對齊。

a = [[1,2,3],[4,5,6]]

b = np.array(a)

2. 陣列與列表的相互轉換 

a = np.ones((2,2))

b = a.tolist() # 陣列轉列表

c = [[1,2,3],[4,5,6]]

d = np.array(c) # 列表轉陣列

e = [1,2,3],[4,5,6]

g = np.array(e)#元組轉陣列

3. 低精度和高精度一起,會轉換為高精度的

a = np.array((1,2.1,3,4,5,6))

b = a.reshape(2,3)

print(a.shape, a.dtype)

4. np.arange(n) 生成一維從0到n-1的向量,可以設定範圍和步長,如np.arange(1,10,2)。python 內建的range生成從0到n-1的列表,一般只用於for迴圈中。

a = np.arange(15)

for i in range(15):

print(i)

5. np.ones .zeros .empty 裡面需要傳入乙個元組或列表,來指定建立什麼形狀,同時可以指定資料型別dtype。

a = np.ones((2,2), dtype = int)

b = np.zeros(10)

6. np.astype 實現資料型別轉換,string型別的數字(如'123')也可以轉換為int。

a = np.array((1,2,3,4))

print(a.dtype)

b = a.astype(np.float64)

print(b.dtype)

7. 大小相等的陣列之間的任何運算都會元素級的,特別注意陣列之間的乘法是元素級的,要實現矩陣乘法,需要用np.dot。

8. 陣列的切片是原始陣列的檢視,資料在賦值時不會複製,想要複製資料,需要在切片後加.copy()

9. 陣列切片用方括號[ ],切片的形式為[start:end:step], 在切片時起點和終點至少要指定乙個。不指定的部分,表示一直到索引最開始或者最後。-1 可以表示最後乙個元素,:表示複製原列表。索引有幾種形式,如[1,2], [:,3],[:2,3:] 注意索引的結尾數要減1,開頭不需要。還有花式索引,a[[1,2,3]] 取對應的行,a[:,[1,2,3]]取對應的列,花式索引會複製資料,注意a[[1,2,3],[1,2,3]] 取的是3個對應位置的數字。進行反向索引時,要在數字前全部加負號,如[-2: -10:-1] 表示取向量的倒數第2個到倒數第10個,步長為2; [-1::-1]  表示從最後乙個按照步長為1一直取到第1個。

a = np.arange(30).reshape(6,5)

b = a[:2,3:]

c = a[[1,5,2]]

d = a[:,[3,4,1]]

a = b[b[:,0] == c, :]   ##  取出某列中所有滿足特定值的所有行,此式子為取出b中第0行裡所有值等於c的所有行

a = b[~b[:,0] == c, :]  ##  反轉,取出所有不滿足該條件的

10. 陣列之間的拼接有兩種方法,hstack,vstack分別對應行拼接和列拼接;concatenate裡axis=0對應列軸,=1對應橫軸。hsplit, vsplit以及split(與concatenate對應)實現矩陣的指定份數的均等分。

a = np.ones((1,2))

b = np.zeros((3,2))

c =np.ones((3,3))

d = np.hstack((b,c))

e = np.concatenate((b,c),axis = 1)

f = np.vstack((a,b))

g, h, i = np.hsplit(c, 3)

11. 陣列中最小最大元素的索引:np.argmin,np.argmax;陣列中最小最大的元素:np.max,np.min。

a = np.arange(30).reshape(6,5)

b = np.argmax(a)

12. python內建zip函式,可以將多個可迭代物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表,當所有物件長度不一致時,以短的為主。

a = np.array((1,2,3))

b = np.array((4,5,6))

c = zip(a,b)

for i, j in zip(a,b):

print(i,j)

13. numpy.where(conditon[, x, y]) 條件邏輯表示式,方括號內可省去,如果條件為true,則其值取x,否則取y。 如果只有條件,則範圍條件中非0元素的索引。其等效為 value = x if c else y for c, x, y in zip(condition, xarr, yarr)。

xarr = np.array([1.1, 1.2, 1.3, 1.4])

yarr = np.array([2.1, 2.2,2.3, 2.4])

condi = np.array([true, false, true, false])

value = np.where(condi, xarr, yarr)

14. 基礎數學和統計方法中,sum,mean, std, var(方差), min, max, argmin, argmax (arg系列返回最值的索引), cumsum等可以分別針對陣列整體,以及axis = 0 (y軸,向), = 1 (x軸, 橫向)進行資料統計。

a = np.random.randn(5,5) # 正態分佈隨機數

b = np.argmin(a)

c = np.argmin(a, axis = 0)

d = a.argmin(axis = 1)

15. 對布林型陣列的方法, python裡0與false, 非0元素與true對應,針對布林型陣列的方法有,sum統計true的個數,實質對0與1的求和,any判斷是否有true, all判斷是否全為true。

a = np.array([false, true, false, false])

print(a.sum())

print(a.any())

print(a.all())

16. sort對指定軸進行從

小到大的排序, argsort 是間接排序、返回數值從小到大的索引

a = np.random.randn(5,3)

b = np.sort(a) # 預設axis=0

b2 = np.sort(a, axis = 0)

b3 = np.sort(a, axis = 1)

17. 唯一化和集合邏輯: unique返回矩陣中唯一值的序列(即所有出現過元素的序列),python內建的set只能針對向量,返回向量中的唯一值序列,該序列只能作為迭代序列,一般用於for迴圈等迭代中。intersect1d(x,y) x與y的交集, union1d(x,y) x與yd的並集, in1d(x,y) x中的元素是否在y集合中, setdiff1d(x,y) 集合差 setxor1d(x,y)異或。

a = np.array(('bob','alice','joe','will','bob','joe'))

b = np.unique(a)

a2 = np.array((1,2,3,4,2,3,1,5,3,2,6,5,7,6,4))

b2 = np.unique(a2)

a3 = np.array([[1,2,3],[2,3,4],[1,2,4]])

b3 = np.unique(a3)

for item in set(a2):

print (item)

18. 線性代數操作, 主要方法有dot(點乘), diag(返回方陣對角元素), trace(返回方陣的跡), det(行列式), eig(f方陣特徵值和特徵向量), inv(方陣的逆), pinv(廣義逆), qr(qr分解), svd(奇異值分解), slove(解方程ax=b)。

19. 在anconda中,針對向量和陣列的處理是不同的,向量不分行向量和列向量,形式為size a(3, ) 是長度為3的向量;陣列為size a(3,1)。在程式設計時,要注意區分,最好把向量轉為陣列。

numpy常用技巧

資料拼接 注意是兩個資料的拼接 當不輸入axis引數時,此時預設axis none,兩個array的shape可以不一樣。否則會出錯。當輸入axis引數時,其所對應axis值的shape被拼在一起,而其他的shape值應當一樣。此時兩個array被拼接在了一起。再來一例子 可以看到是shape 2 ...

Pandas常用方法和使用技巧

在python 3 環境下,根據實際使用pandas的一些經驗,簡單總結了一下pandas的使用要點。pandas 有三種結構,都可以指定索引,預設情況下,索引值從0。三種結構分別為 1.series初始化 data 1,2,3,4 a series data b series data,index...

numpy常用方法

資料的載入 常用引數 np.loadtext frame,delimiter,dtype,skiprows,usecols,unpack egfile path np.loadtext file path,delimiter dtype int skiprows 0,usecols 0 unpack...