讀取數據
np.loadtxt(name,dtype=, comments='#',delimiter=None, converters=None, skiprows=0, usecols=(1,2), unpack=False,ndmin=0):
frame:文件、字符串或產生器
dtype:數據類型,默認np.float
comments:跳過某些行纵刘,這里指, 如果行的開頭為#就會跳過該行
delimiter:分隔字符串啸箫,默認空格
converters:對數據進行預處理的參數, 可以先定義一個函數
skiprows:跳過前幾行赛惩,默認0
usecols:只讀取指定列煌茬,這里指只讀取1,2列址否,默認全部讀取
unpack:如果為True局蚀,將按列讀取麦锯,默認False
converters:對數據進行預處理的參數, 我們可以先定義一個函數
txt = 'c:\\Users\\loadtxt.txt'
a = np.loadtxt(txt,dtype=int,delimiter=',',skiprows=1,unpack=True)
#Out:
#array([[ 2, 3, 4],
# [ 3, 4, 5],
# [ 4, 5, 6],
# [ 5, 6, 7],
# [ 6, 7, 8],
# [ 7, 8, 9],
# [ 8, 9, 10],
# [ 9, 10, 11]])
創(chuàng)建數組
np.array():創(chuàng)建數組
np.array(range(start, stop, step)):
start: 計數從 start 開始。默認是從 0 開始;
stop: 計數到 stop 結束琅绅,但不包括 stop扶欣;
step:步長,不可為小數千扶,默認為1料祠。
np.arange(start, stop, step):
start: 計數從 start 開始。默認是從 0 開始;
stop: 計數到 stop 結束澎羞,但不包括 stop髓绽;
step:步長,支持小數煤痕,默認為1梧宫。
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array(range(1,6,2))
c = np.arange(1,6,1.5)
print('a:%s b:%s c:%s' %(a,b,c))
#[out]:a:[1 2 3 4 5] b:[1 3 5] c:[1. 2.5 4. 5.5]
生成隨機數組
np.random.rand(a,b):隨機生成a行b列的數組,數組元素符合[0,1]之間均勻分布的隨機樣本
np.random.rand(2,3)
#Out:
#array([[0.69316799, 0.60458541, 0.01979631],
# [0.75141108, 0.48813725, 0.05425274]])
np.random.randn(a,b):隨機生成a行b列的數組摆碉,數組元素符合標準正態(tài)分布N(0,1)
np.random.randn(2,3)
#Out:
#array([[-0.49229221, -1.66797528, 1.41183768],
# [ 0.79337647, -0.66594975, 0.35059854]])
np.random.randint(low,high,size=(a,b),dtype):隨機生成a行b列的數組塘匣,數組元素為半開半閉區(qū)間[low,high)上離散均勻分布的整數值;若high=None,則取值區(qū)間變?yōu)閇0,low)
np.random.randint(1,5,size=(2,3),dtype=int)
#Out:
#array([[4, 4, 4],
# [4, 4, 1]])
np.random.normal(loc=a,scale=b,size=(c,d)) :隨機生成c行d列的數組巷帝,數組元素符合均值為a標準差為b正態(tài)分布忌卤。
np.random.normal(loc=0,scale=1,size=(2,3))
#Out:
#array([[ 0.52191241, -1.24927379, -0.06311665],
# [-1.75515889, -1.3952226 , 0.447512 ]])
np.random.random(size=a) :隨機產生a個元素的一維數組,元素為[0.0, 1.0)之間的浮點數楞泼,默認size=None驰徊,此時只生成一個隨機浮點數
np.random.random(size=3)
#Out: array([0.27244681, 0.99441891, 0.86932329])
np.random.random()
#Out: 0.6599702555660103
數組形狀
np.shape(a):輸出元組(),包含數組a維度堕阔,行數棍厂,列數。
a.reshape((a,b)):將數組a的形狀改為a行b列超陆,若不知道a的shape屬性是多少牺弹,但是想讓a變成只有一列浦马,可使用a.reshape(-1,1),Numpy將自動計算行數张漂。
a.transpose():對a轉置
a = np.array([[1,2,3],[4,5,6]])
np.shape(a)
#Out: (2, 3)
a.reshape((3,2))
#Out:
#array([[1, 2],
# [3, 4],
# [5, 6]])
a.reshape((-1,1))
#Out:
#array([[1],
# [2],
# [3],
# [4],
# [5],
# [6]])
a = np.array([[1,2,3],[4,5,6]])
a.transpose()
#Out:
#array([[1, 4],
# [2, 5],
# [3, 6]])
a.transpose():對a轉置晶默,當數組為高維時,如參數為(1,0,2)表示將1軸變?yōu)?軸航攒,0軸變?yōu)?軸磺陡,2軸不變,如下圖
a = np.array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
A.transpose((1,0,2))
#Out:
#array([[[ 0, 1, 2, 3],
# [ 8, 9, 10, 11]],
#
# [[ 4, 5, 6, 7],
# [12, 13, 14, 15]]])
數組計算
兩個數組的相加漠畜、相減以及相乘都是對應元素之間的操作币他。
廣播的原則:如果兩個數組的后緣維度(trailing dimension,即從末尾開始算起的維度)的軸長度相符憔狞,或其中的一方的長度為1圆丹,則認為它們是廣播兼容的。廣播會在缺失和(或)長度為1的維度上進行躯喇。
a = np.array([[1,2,3],[1,2,3]])
a*2
#[Out]:
#array([[2, 4, 6],
# [2, 4, 6]])
b = np.array([[1,1,1],[1,1,1]])
a-b
#[Out]:
#array([[0, 1, 2],
# [0, 1, 2]])
c = np.array([[1,2,3]])
a+c
#Out:
#array([[2, 4, 6],
# [2, 4, 6]])
d = np.array([[[1,1,1],[1,1,1]],[[1,1,1],[1,1,1]],[[1,1,1],[1,1,1]]])
a+d
#Out[25]:
#array([[[2, 3, 4],
# [2, 3, 4]],
#
# [[2, 3, 4],
# [2, 3, 4]],
#
# [[2, 3, 4],
# [2, 3, 4]]])
索引和切片
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[[0,1],:] #切片a的第一行第二行所有元素
#Out:
#array([[1, 2, 3],
# [2, 3, 4]])
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[[0,1],[0,2]] #切片a的第一行第一列和第二行第三列的元素
#Out: array([1, 4])
替換
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[0,0]=3 #將第一行第一列的元素替換成1
print(a)
#[[3 2 3]
# [2 3 4]
# [3 4 5]]
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[a<3]=6 #將小于3的所有元素替換成6
print(a)
#[[6 6 3]
# [6 3 4]
# [3 4 5]]
np.where(condition, x,y):滿足條件(condition)辫封,輸出x,不滿足輸出y廉丽。
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
np.where(a<3, 6, a)
#Out:
#array([[6, 6, 3],
# [6, 3, 4],
# [3, 4, 5]])
np.where(condition):只有條件 (condition)倦微,沒有x和y,則輸出滿足條件 (即非0) 元素的坐標
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
np.where(a<4)
#Out[35]:
#(array([0, 0, 0, 1, 1, 2], dtype=int64),
# array([0, 1, 2, 0, 1, 0], dtype=int64))
a.clip(min, max):限制數組a的上下界正压,給定一個范圍[a, b]欣福,數組中元素值小于a的,要被更改為a焦履,數組中元素值大于b的拓劝,要被更改為b。
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a.clip(2,4)
#Out:
#array([[2, 2, 3],
# [2, 3, 4],
# [3, 4, 4]])
數組拼接
np.vstack((a,b)):將a嘉裤,b兩個數組按行放到一起
np.hstack((a,b)):將a郑临,b兩個數組按列放到一起
a = np.array([[1,2,3],[2,3,4]])
b = np.array([[3,4,5]])
np.vstack((a,b))
#Out:
#array([[1, 2, 3],
# [2, 3, 4],
# [3, 4, 5]])
a = np.array([[1,2,3],[2,3,4]])
b = np.array([[1,2],[2,3]])
np.hstack((a,b))
#Out:
#array([[1, 2, 3, 1, 2],
# [2, 3, 4, 2, 3]])
常用統(tǒng)計函數
a=np.array([[1,2,3],[1,2,3]])
a.sum(axis=0) #列元素求和
#Out: array([2, 4, 6])
a=np.array([[1,2,3],[1,2,3]])
a.sum(axis=1) #行元素求和
#Out: array([6, 6])
a=np.array([[1,2,3],[1,2,3]])
a.sum() #所有元素求和
#Out: 12
a=np.array([[1,2,3],[1,2,3]])
a.mean(axis=0) #列元素求均值
#Out: array([1., 2., 3.])
a=np.array([[1,2,3],[1,2,3]])
np.median(a,axis=0) #列元素求中位數
#Out: array([1., 2., 3.])
a=np.array([[1,2,3],[4,5,6]])
a.min(axis=0) #列元素求最小值
#Out: array([1, 2, 3])
a=np.array([[1,2,3],[4,5,6]])
a.max(axis=0) #列元素求最大值
#Out: array([4, 5, 6])
a=np.array([[1,2,3],[4,5,6]])
np.ptp(a,axis=0) #列元素求最大值與最小值之差
#Out: array([3, 3, 3])
a=np.array([[1,2,3],[4,5,6]])
a.std(axis=0) #列元素求標準差
#Out: array([1.5, 1.5, 1.5])
數組復制
a=b:完全不復制,a和b相互影響
a=np.array([[1,2,3],[4,5,6]])
b=a
#Out:
#a:array([[1, 2, 3],
# [4, 5, 6]])
#b:array([[1, 2, 3],
# [4, 5, 6]])
a[1,1]=10
#Out:
#a:array([[ 1, 2, 3],
# [ 4, 10, 6]])
#b:array([[ 1, 2, 3],
# [ 4, 10, 6]])
b[1,1]=0
#Out:
#a:array([[1, 2, 3],
# [4, 0, 6]])
#b:array([[1, 2, 3],
# [4, 0, 6]])
a = b[:]:視圖的操作屑宠,會創(chuàng)建一個新對象a厢洞,但a的數據完全由b保管,兩個數據變化一致典奉,其與a=b的區(qū)別為:a=b將創(chuàng)建a與b兩個快捷方式并指向同一文件躺翻;而a=b[:]先將b指向的文件復制一份作為副本,然后創(chuàng)建一個指向該副本的快捷方式a卫玖。
a=b.copy():復制公你,互相不影響
a=np.array([[1,2,3],[4,5,6]])
b=a.copy()
#Out:
#a:array([[1, 2, 3],
# [4, 5, 6]])
#b:array([[1, 2, 3],
# [4, 5, 6]])
a[1,1]=10
#Out:
#a:array([[ 1, 2, 3],
# [ 4, 10, 6]])
#b:array([[1, 2, 3],
# [4, 5, 6]])
b[1,1]=0
#Out:
#a:array([[ 1, 2, 3],
# [ 4, 10, 6]])
#b:array([[1, 2, 3],
# [4, 0, 6]])
其他函數
np.zeros((3,3)) #創(chuàng)建一個3行3列全為0的數組
#Out:
#array([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]])
np.eye(3) #創(chuàng)建一個對角線全為1的3行3列的方陣
#Out:
#array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
a = np.array([[1,2,3],[4,5,6]])
np.argmax(a,axis=0) #獲取列上最大值的位置
#Out: array([1, 1, 1], dtype=int64)
np.argmin(a,axis=1) #獲取行上最小值的位置
#Out: array([0, 0], dtype=int64)