python之Numpy學習筆記

1 基本操做

1.1 array

建立數組:python

import numpy as np
 np.array([1,2,3,4],dtype=int64)
複製代碼

改變數組維度:數組

np.arange(15).reshape(3,5)
複製代碼

1.2 矩陣

建立矩陣:bash

import numpy as np
 np.full(shape=(3,5),full_value=10)
複製代碼

創建一個3行5列,而且值全爲10的矩陣;dom

1.3 linspace

做用:按照給定的個數,本身計算步長,生成最終的數組。性能

np.linspace(0,20,10)
# 三個參數: 第一二個參數是起始點和終點,第三個參數是要生成的個數
複製代碼

運行結果: 大數據

1.4 random

生成隨機數:spa

np.random.randint(0,10,10)
#建立一個包含10個數的隨機數組
複製代碼

注意:它是取不到10的,由於是左閉右開的。設計

生成隨機矩陣:3d

np.random.randint(4,8,size=(3,5))
複製代碼

若是想要解決每次生成的隨機數不同的問題,能夠採用seed,這樣每次生成的隨機數就會同樣了。code

栗子:

np.random.seed(666)
# 以666爲種子生成隨機數

random.random()
#生成默認是在0,1之間的隨機數
複製代碼

若是要生成符合正態分佈的隨機數:

np.random.normal(10,100) 
#生成均值爲10,方差爲100的隨機矩陣
複製代碼

1.5 訪問多維數組

訪問方式:

X[2,2]
#能夠訪問,可是不建議採用X[2][2]這種方式,而是採用下面的切片方式
複製代碼

切片方式:

x = np.arange(15).reshape(3,5)

x[:2]
# 返回前兩行生成的數組。
複製代碼

運行結果:

x[2:]
#返回第二行到最後一行的數組

x[:2,:3]
#前兩行,前三列,返回一個2X3的數組

X[:2][:3]
#將只返回前兩行

X[::-1,::-1]
#從最後一行訪問,從最後一列進行訪問

X[:,0]
# 只取一列
複製代碼

注意:切片是原始數組的視圖,視圖上任何操做都會印象原始數據這樣設計的目的是處理大數據,若是Numpy堅持要將數據複製來複制去會產生何等的性能和內存問題。

若是想要一份副本,而不是視圖,採用copy

subX = x[:2,:3].copy()
複製代碼

此時對切片數組進行的任何操做將不會影響原來的數組。

1.6 reshape

做用:修改數組維度

栗子:

x.reshape(-1,10)
# 只想獲得10列,幾行不關注
複製代碼

注意:reshape新生成數組和原數組公用一個內存,無論改變哪一個都會互相影響

2. Numpy數組的合併與分割

2.1 合併操做

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

np.concatenate([x,y])
#結果:array([1,2,3,3,2,1])

複製代碼

多維呢?

A = np.array([1,2,3],[4,5,6])
np.concatenate([A,A])
複製代碼

結果:

若是想要改變拼接方式,用axis

np.concatenate([A,A],axis = 1)
複製代碼

注意:concatenate只能拼接相同維度的矩陣。若是想要拼接,能夠採用reshape將低維變成高維,而後再進行操做。

固然,若是不想轉換,也能夠用vstackhstack。這兩個方法內部封裝了轉換。

  • vstack: 垂直方向堆疊
  • hstack:水平方向堆疊

2.2 分割操做split

反手就是一個栗子:

再來一個栗子:

固然,除了能夠水平切,也能夠豎直切,仍是傳入參數axis。 這裏就不舉例了。

however,Numpy大哥擔憂用起來仍是太複雜,又又又封裝了兩個方法,一個是vsplit,一個hsplit

vsplit舉例:

hsplit舉例:

2.3 Numpy.array中的運算

2.4 Universal Functions

2.5 矩陣運算

相乘:

轉置:

堆疊:

矩陣的逆:

僞逆矩陣:

2.6 Numpy中的聚合運算

np.sum(L)
# 其實python也提供了sum操做,然而使用Numpy效率更高,差距是100多倍,徹底不是一個級別的!!
複製代碼

求最小值和最大值:

np.min(big_array)

np.max(big_array)
複製代碼

對於二維矩陣的聚合運算:

若是想求出每行的和或者每列的和呢?答案仍是axis

axis= 0表示沿着行的方向進行計算,也就是說進行列的相加操做。比較繞~~~

對矩陣中的元素相乘,用prod():

若是是對裏面的元素進行+1後再相乘呢?

同理還有:

np.mean(x)
#求平均數

np.median(x)
#求中值

np.percenttile(array,q=25)
#求在數組中大於25%的百分位點的比例;

np.var(array)
#方差

np.std(array)
#標準差
複製代碼

2.7 索引

求最小值的索引:

np.argmin(x)
複製代碼

2.8 排序和使用索引

對數組進行排序:

np.sort()
#不改變元數組

x.sort()
#改變原數組

np.argsort(x)
#返回排序後的索引數組

np.partition(x,3)
#快速排序,按照比3小的和比3大的分紅兩邊,記住,不是有序的

#np.argpartition(x,3)
#快速排序的索引數組
複製代碼

2.9 numpy.array的比較

x<3
#將x數組中的全部元素和3比較,而後返回[True,False...]的數組

2*x == 24 -4 * x
#將x數組中的全部元素帶入公式,而後返回[True,False...]的數組(知足返回True)


np.sum(x<=3)

np.count_nonzero(x<=3)

np.any(x=0)
#x中任何一個元素等於0,返回True

np.all(x>0)
#x中全部元素大於0,返回True

np.sum(x % 2 == 0)
#知足這個公式的數值的和

np.sum((x>3) & (x < 10))
#注意用的是'&'

np.sum(-(x==0)
# '-'是非運算符
複製代碼
相關文章
相關標籤/搜索