Numpy講解(快速入門)
阿新 • • 發佈:2018-11-02
''' import numpy as np [[1,2,3], [4,5,6]]#這代表的的是一個列表 array=np.array([[1,2,3], [4,5,6]])#通過這個函式就轉換成了陣列 print(array) print(array.shape)#輸出的是陣列的形狀即多少行,多少列,輸出的結果是一個元組的形式,如果元組中有一個值,那麼這個陣列就是一維的陣列,一次類推。 print(array.size)#輸出陣列的大小,總共有多少個元素 print(array.ndim)#輸出陣列的維度 import numpy as np a=np.array([1,2,3],dtype=np.int)#預設的int代表int32,你也可以寫int64還有np.float,np.complex等 b=np.array([1,2,3],ndim=2)#代表二維陣列 print(a) print(b) print(a.dtype) import numpy as np a=np.array([[1,2,3], [4,5,6]]) #a.shape=(3,2) print(a)#這就是一個二維的陣列 b=np.zeros([2,2]) print(b) c=np.ones([2,2]) print(c) d=np.empty([2,2]) print(d) e=np.arange(10,19,2) print(e) f=np.arange(12).reshape((3,4)) print(f) import numpy as np a=np.array([10,20,30,40]) b=np.arange(4) c=a-b print(a) print(b) print(c) print(a**2) import numpy as np #eye(N,M,K)N:代表返回的行數M:代表返回的列數K:代表對角線的行號 a=np.eye(6)#返回一個對角線為1其餘為0的二維陣列 print(a) b=np.eye(6,3,2) print(b) #np.inentity(N,dtype) c=np.identity(3,int) print(c)#返回的是一個對角線為1的二維陣列 import numpy as np #np.matrix(data,dtype,copy)data是字串或者為ndarray型別 a=np.array([(1,2,),(3,4)]) a1 = np.matrix('1 2 7; 3 4 8; 5 6 9') b=np.matrix(a) print(b)#將陣列轉換成矩陣 c=np.asmatrix(a) print(c) print(a[0,0]) print(a1) import numpy as np x=np.array([1,2,3]) y=x z=np.copy(x) print(x) print(y) print(z) x[0]=10 print(x[0]==y[0]) print(x[0]==z[0]) import numpy as np inteable=(x**2 for x in range(1,10)) a=np.fromiter(inteable,dtype=int) print(a) import numpy as np import matplotlib.pyplot as plt #np.linspace(start,end,num)主要這幾個引數,num是分幾段。 a=np.linspace(2.0,3.0,num=5) print(a) N=8 y=np.zeros(N) x1=np.linspace(0,10,N,endpoint=True) x2=np.linspace(0,10,N,endpoint=False) print(plt.plot(x1, y, 'o')) plt.show() import numpy as np #np.diag(v,k)v就是一個數組,k是一個偏移量,函式返回的是對角線的值,如果沒有k=0的話 a=np.array([[1,2,3],[4,5,6],[7,8,9]]) b=np.diag(a) c=np.diag(a,k=1) print(b) print(c) import numpy as np #np.diagflat(v,k)返回的是吧陣列中的值作為對角線輸出。 a=np.array([[1,2],[3,4]]) b=np.diagflat(a) print(b) import numpy as np [[1,2,3], [4,5,6]]#這代表的的是一個列表 array=np.array([[1,2,3], [4,5,6]])#通過這個函式就轉換成了陣列 print(array) print(array.shape)#輸出的是陣列的形狀即多少行,多少列 print(array.size)#輸出陣列的大小,總共有多少個元素 print(array.ndim)#輸出陣列的維度 import numpy as np a=np.array([1,2,3],dtype=np.int)#預設的int代表int32,你也可以寫int64還有np.float,np.complex等 b=np.array([1,2,3],ndim=2)#代表二維陣列 print(a) print(b) print(a.dtype) import numpy as np a=np.array([[1,2,3], [4,5,6]]) print(a)#這就是一個二維的陣列 b=np.zeros([2,2]) print(b) c=np.ones([2,2]) print(c) d=np.empty([2,2]) print(d) e=np.arange(10,19,2) print(e) f=np.arange(12).reshape((3,4)) print(f) import numpy as np a=np.array([10,20,30,40]) b=np.arange(4) c=a-b print(a) print(b) print(c) print(a**2) import numpy as np #eye(N,M,K)N:代表返回的行數M:代表返回的列數K:代表對角線的行號 a=np.eye(6)#返回一個對角線為1其餘為0的二維陣列 print(a) b=np.eye(6,3,2) print(b) #np.inentity(N,dtype) c=np.identity(3,int) print(c)#返回的是一個對角線為1的二維陣列 import numpy as np #np.matrix(data,dtype,copy)data是字串或者為ndarray型別 a=np.array([(1,2,),(3,4)]) a1 = np.matrix('1 2 7; 3 4 8; 5 6 9') b=np.matrix(a) print(b)#將陣列轉換成矩陣 c=np.asmatrix(a) print(c) print(a[0,0]) print(a1) import numpy as np x=np.array([1,2,3]) y=x z=np.copy(x) print(x) print(y) print(z) x[0]=10 print(x[0]==y[0]) print(x[0]==z[0]) import numpy as np inteable=(x**2 for x in range(1,10)) a=np.fromiter(inteable,dtype=int) print(a) import numpy as np import matplotlib.pyplot as plt #np.linspace(start,end,num)主要這幾個引數,num是分幾段。 a=np.linspace(2.0,3.0,num=5) print(a) N=8 y=np.zeros(N) x1=np.linspace(0,10,N,endpoint=True) x2=np.linspace(0,10,N,endpoint=False) print(plt.plot(x1, y, 'o')) plt.show() import numpy as np #np.diag(v,k)v就是一個數組,k是一個偏移量,函式返回的是對角線的值,如果沒有k=0的話 a=np.array([[1,2,3],[4,5,6],[7,8,9]]) b=np.diag(a) c=np.diag(a,k=1) print(b) print(c) import numpy as np #np.diagflat(v,k)返回的是吧陣列中的值作為對角線輸出。 a=np.array([[1,2],[3,4]]) b=np.diagflat(a) print(b) import numpy as np a=np.arange(10) a[2]=100 a[3]=101 print(a) print(a[5]) print(a[3:5]) print(a[:5]) print(a[:-1]) print(a[1:-1:2])#起始位置,結束位子,步長,三個引數的意思。 print(a[::-1])#省略起始位置和結束位置,輸出時從後往前全部輸出。 print(a[5:1:-2])#如果起始位置的下標大於結束位置的下表,那麼步長必須是負數。 import numpy as np a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6) print(a) [[ 0 1 2 3 4 5] [10 11 12 13 14 15] [20 21 22 23 24 25] [30 31 32 33 34 35] [40 41 42 43 44 45] import numpy as np a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6) print(a) print(a[0:3,2:4]) print(a[:,2:4]) import numpy as np a=np.array([1,2,3,4]) b=np.array([6,7,8,9]) c=np.add(a,b) print(c) import numpy as np a=[1,2,3,4] b=[[1,2,3],(4,5,6)] c=np.asarray(a,dtype=float)#兩個引數 d=np.asarray(b) print(c)#將列表轉換為陣列 print(d) import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) print(x) y = x[[0,1,2], [0,1,0]]#y中的值是(0,0),(1,1),(2,0)的值。 print(y) '''
import numpy as np # A=np.arange(3,15).reshape(3,4) # print(A.flatten())#把一個二維的陣列轉換為一個一維的陣列 # for item in A.flat: # print(item) ################### #陣列的合併 # A=np.array([1,1,1]) # B=np.array([2,2,2]) # C=np.vstack((A,B))#把兩個資料進行合併(上下合併) # D=np.hstack((A,B)) # E=np.array([1,1,1])[:,np.newaxis] # F=np.array([2,2,2])[:,np.newaxis] # G=np.hstack((E,F)) # H=np.concatenate((E,F,F,E),axis=0) # I=np.concatenate((E,F,F,E),axis=1) # print(A.shape) # print(B.shape) # print(C.shape) # print(D.shape) # print(G) # print(H) # print(I) # print(A[np.newaxis,:].shape)#增加一個維度在行上 # print(A[np.newaxis,:]) # print(A[:,np.newaxis].shape)#增加一個維度在列上 # print(A[:,np.newaxis]) # print(C) # print(D) ############ #陣列的分割 # A=np.arange(12).reshape(3,4) # #等量的分割 # print(np.split(A,2,axis=1)) # print(np.split(A,3,axis=0)) # print(np.vsplit(A,3)) # print(np.hsplit(A,2)) # #不等量的分割 # print(np.array_split(A,3,axis=1)) #陣列的賦值 #這樣寫的話,如果a 改變了那麼其他的被賦值的也都會改變 # a=np.arange(4) # b=a # c=a # d=b # e=a.copy()#不被改變的賦值 # a[0]=11 # print(a) # print(b) # print(e)
import numpy as np ''' a=np.arange(15).reshape(3,5) print(a)#輸出a print(np.size(a))#陣列的大小。元組的長度的值等於軸的數量ndim。 print(np.ndim(a))#陣列的軸數也就是秩數 print(np.shape(a))#陣列的形狀幾行幾列 print(a.dtype.name)#陣列的型別 # 維度就是我們所說的空間維度,一維是直線,二維平面(比如1080p灰度圖,1920x1080), # 三維立方體(比如1080P的RGB影象就是1920x1080x3)。 #NumPy陣列的維數稱為秩,一維陣列的秩為1,二維陣列的秩為2,以此類推。 #在NumPy中,每一個線性的陣列稱為是一個軸(axes),秩其實是描述軸的數量。也就是說秩和軸是等價的。 #比如說,二維陣列相當於是兩個一維陣列,其中第一個一維陣列中每個元素又是一個一維陣列。 #所以一維陣列就是NumPy中的軸(axes),第一個軸相當於是底層陣列,第二個軸是底層數組裡的陣列。 #而軸的數量——秩,就是陣列的維數。 #建立陣列 #1.您可以使用該array函式從常規Python列表或元組建立陣列。結果陣列的型別是從序列中元素的型別推匯出來的。 test1=np.array([2,3,4]) test2=np.array((2.0,3.0,4.0)) print(test1) print(test2) print(test1.dtype,test2.dtype) #將序列轉換成二維陣列或者三位陣列 test3=np.array([[1,2,3],[4,5,6]])#等價於np.array([(1,2,3),(4,5,6)]) print(test3) #也可以在建立是指定其陣列的型別 test4=np.array([[1,2],[3,4]],dtype=np.complex) print(test4) #通常,陣列的元素最初是未知的,但其大小是已知的。因此,NumPy提供了幾個函式來建立具有初始佔位符內容的陣列。# 這些最小化了增長陣列的必要性,這是一項昂貴的操作 #該函式zeros建立一個充滿零的陣列 test5=np.zeros((3,4)) print(test5) #該函式 ones建立一個充滿1的陣列 test6=np.ones((2,3,4))#三維 print(test6) #該函式empty 建立一個數組,其初始內容是隨機的,預設情況下,建立的陣列的dtype是 float64。 test7=np.empty((2,3)) print(test7) #arange test8=np.arange(10,30)#可以兩個引數也可以三個引數,第三個引數代表的是步長 print(test8) print(type(test8))#所以test8是陣列型別 #np.random.rand用[0,1]之間的數來均勻分佈 test9=np.random.rand(2,3,2) test10=np.random.rand(3,2) print(test9) print(test10) #np,random.randn這個是狀態分佈 test11=np.random.randn() print(test11) #列印陣列將以為數字列印成行,將二維陣列列印成矩陣,將三維陣列列印成矩陣列表 b=np.arange(6) print(b) c=np.arange(12).reshape(3,4) print(c) d=np.arange(12).reshape(2,2,3) print(d) #如果陣列太大而無法列印,那麼numpy會自動跳過陣列中心得部分並僅列印角落 print(np.arange(10000)) #基本操作 a=np.array([20,30,40,50]) b=np.arange(4) c=a-b d=b**2 e=10*np.sin(a) print(c) print(d) print(e) print(a<35)#判斷陣列中的每個元素返回值為Ture或者是Flase f=np.random.random((2,3)) print(f) print(f.sum()) print(f.min()) print(f.max()) g=np.arange(12).reshape(3,4) print(g) print(g.sum(axis=0))#axis=0表示的是列,axis=1,表示的是行 A=np.array([[1,1], [0,1]])#A是陣列 B=np.array([[2,0], [3,4]])#B是陣列 A1=np.mat(A)#A1代表的是矩陣 B1=np.mat(B)#B1代表的是矩陣 C=np.multiply(A,B) C1=np.multiply(A1,B1) #陣列和矩陣對應位置相乘,輸出與輸入陣列/矩陣的大小一致。 #兩個陣列運算,結果為一個數組,兩個矩陣運算,結果為一個矩陣。 D=np.dot(A,B)#dot是二維陣列的運算規則 D1=np.dot(A1,B1) print(C) print(C1) print(D) print(D1) #同用功能 a=np.arange(3) b=np.exp(a)#exp函式計算的是e的X次方 print(b) c=np.sqrt(a)#開平方 print(c) d=np.array([2,3,4])#相加 e=np.add(a,d) print(e) #索引,切片,迭代 a=np.arange(10)**3#每一個元素都進行三次方 print(a) print(a[2]) print(a[2:5]) a[:6:2]=-1000#從開始到位置6,排他,將每2個元素設定為-1000 print(a) #介紹一個函式np.fromfunction( print(a[::-1])#順序取反)它的作用是從函式中建立陣列 def function(x,y):#x,y的值其實就是陣列的索引; return 10+x+y a=np.fromfunction(function,(5,4),dtype=int) print(a) #多維陣列每個軸可以有一個索引,這些索引以逗號的元組給出。 print(a[2,3])#這種形式表的是一個元素 print(a[0:5,1])#按照軸數或者是秩數 print(a[:,1])#如果冒號前後沒有數字,那麼代表的是整個軸 print(a[1:3,:]) #當提供的索引少於軸的數量時,缺失的索引被認為是完整的切片 :; print(a[-1])#等價於a[-1,:] #對多維數字進行迭代(是針對第一個軸完成的)輸出的結果是每一個周的陣列 for row in a: print(row) #如果想要對每一個元素進行迭代,可以使用flat屬性,作為陣列的所有元素的迭代器 for element in a.flat: print(element) c=np.array([[[0,1,2], [10,12,13]], [[100,101,102], [110,112,113]]]) print(c.shape) print(c[1,...])#等價於c[1,:,:] print(c[...,2])#等價於c[:,:,2] #改變陣列的形狀 a=np.floor(10*np.random.random((3,4)))#math.floor和np.floor函式的作用都是返回數字的下舍整數 print(a) #可以使用各種命令更改陣列的形狀。請注意,以下三個命令都返回已修改的陣列,但不更改原始陣列: print(a.ravel())#按照一行一行的輸出 print(a.reshape(6,2))#重新設定格式 print(a.T)#裝置, #堆疊不同的陣列 a=np.floor(10*np.random.random((2,2))) b=np.floor(10*(np.random.random((2,2)))) c=np.vstack((a,b)) d=np.hstack((a,b))#這兩個函式的作用是堆疊兩個陣列,當然這兩個陣列是同秩的, #但也有不同,vstack是整體的堆疊,列數不變,行數增加,hstack是合併形式的堆疊,行數不變,列數變多。 print(a) print(b) print(c) print(d) from numpy import newaxis e=np.column_stack((a,b)) print(e) m=np.array([1,2]) n=np.array([3,4]) res=np.column_stack((m,n)) print(res) #可以看出如果是二維陣列,那麼hstack和column_stack是相同的。 #將一個數組分割成幾個較小的陣列 a=np.floor(10*np.random.random((2,12))) print(a) b=np.hsplit(a,3) print(b) c=np.hsplit(a,(3,4))#這種形式是指定在第三列和第四列後分割 print(c) '''