日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Python】numpy库和scipy库的安装与使用

發布時間:2024/8/1 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】numpy库和scipy库的安装与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

numpy是一個用Python實現的科學計算包,專為進行嚴格的數值處理而產生,尤其是對大型多維數組和矩陣的支持,并且有一個大型的高級數學函數庫來操作這些數組。numpy提供了許多高級的數值編程工具,如實用的線性代數運算、傅立葉變換、隨機數產生等。

scipy(高級科學計算庫)和numpy聯系很密切,scioy一般都是操控numpy數組來進行科學計算、統計分析,所以可以說是基于numpy之上了。scipy有很多子模塊可以應對不同的應用,例如插值運算,優化算法等等。scipy則是在numpy的基礎上構建的更為強大,應用領域也更為廣泛的科學計算包。正是出于這個原因,scipy需要依賴numpy的支持進行安裝和運行。

2.安裝

①先安裝numpy,打開cmd命令行輸入

pip install numpy

②安裝scipy同理

pip3 install scipy

效果如圖:

3.使用方法(代碼匯總非原創)

1.創建數組

import numpy as np #有如下幾種方式創建ndarray數組: ''' (1) 用np.array從列表、元組創建 ''' print("================== np.array ==================") # 從list創建array a = np.array([1,2,3,4,5,6]) print(a) # array([1, 2, 3, 4, 5, 6]) a = np.array((1,2,3,4)) print(a) # array([1, 2, 3, 4])''' (2) 指定起止范圍及間隔創建 (2.1) numpy 包中的使用 arange 函數創建數值范圍并返回 ndarray 對象,函數格式如下:numpy.arange(start, stop, step, dtype) start:起始值,默認為0; stop:終止值(不包含) step:步長,默認為1; dtype:ndarray中的數據類型,如果沒有提供,則會使用輸入數據的類型。 例如:通過指定start, stop,step來產生一個一維的ndarray ''' print("================== np.arange ==================") a = np.arange(5) print (a)# 設置了 dtype a = np.arange(5, dtype = float) print (a)a = np.arange(0, 20, 2) print(a) #array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])''' (2.2) numpy.linspace 函數用于創建一個一維數組,數組是一個等差數列構成的, 格式如下:np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) start:序列的起始值 stop:序列的終止值,如果endpoint為true,該值包含于數列中 num:要生成的等步長的樣本數量,默認為50 endpoint:值為 true 時,數列中包含stop值,反之不包含,默認是True。 retstep:如果為 True ,生成的數組中會顯示間距,反之不顯示。默認是False。 dtype:ndarray的數據類型 ''' print("================== np.linspace ==================") #設置起始點為 1 ,終止點為 10,數列個數為 10。 a = np.linspace(1,10,10,retstep = True) print(a) a = np.linspace(1,10,10) print(a) #設置元素全部是1的等差數列: a = np.linspace(1,1,10) print(a)''' (2.3) numpy.logspace 函數用于創建一個等比數列。格式如下: np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) start:序列的起始值為:base ** start stop:序列的終止值為:base ** stop。如果endpoint為true,該值包含于數列中。 num:要生成的等步長的樣本數量,默認為50 endpoint:值為 true 時,數列中包含stop值,反之不包含,默認是True。 base:對數 log 的底數。 dtype:ndarray的數據類型 ''' print("================== np.logspace ==================") # 默認底數是 10 a = np.logspace(1.0, 2.0, num = 10) print (a) #將對數的底數設置為 2 : a = np.logspace(0,9,10,base=2) print (a) ''' (3) numpy.empty方法用來創建一個指定形狀(shape)、數據類型(dtype)且未初始化的數組:numpy.empty(shape, dtype = float, order = 'C') order有"C"和"F"兩個選項,分別代表行優先和列優先,在計算機內存中的存儲元素的順序。shape : int or tuple of int ''' print("================== np.empty ==================") x = np.empty([3,2], dtype = int) print (x) x = np.empty((3,2), dtype = int) print (x) y = np.empty([4,2], dtype = int) print (y)''' (4) numpy.zeros創建指定大小的數組,數組元素以 0 來填充: numpy.zeros(shape, dtype = float, order = 'C') ''' print("================== np.zeros ==================") a = np.zeros([3,3]) print(a) ''' (5) numpy.ones創建指定形狀的數組,數組元素以 1 來填充: ''' print("================== np.ones ==================") a = np.ones([3,3]) print(a) ''' (6) numpy.eye創建單位矩陣數組 ''' print("================== np.eye ==================")a = np.eye(5) print(a)''' (7) numpy.random.randn創建標準正態分布數組: # randn(size) 創建服從 X~N(0,1) 的正態分布隨機數組 ''' print("================== np..random.randn ==================") a = np.random.randn(2,3) print(a)''' (8) numpy.random.randint([low,high],size)創建隨機分布整數型數組。 利用 randint([low,high],size) 創建一個整數型指定范圍在 [low.high] 之間的數組 ''' print("================== np.random.randint ==================")a = np.random.randint(100,200,(3,3)) print(a)''' (9) 從已有的數組創建數組 (9.1) numpy.asarray numpy.asarray類似numpy.array,格式為: numpy.asarray(a, dtype = None, order = None) ''' print("================== np.asarray ==================")#將列表轉換為 ndarray: x = [1,2,3] a = np.asarray(x) print (a)#將元組轉換為 ndarray: x = (1,2,3) a = np.asarray(x) print (a)#設置了 dtype 參數: x = [1,2,3] a = np.asarray(x, dtype = float) print (a) ''' (9.2) numpy.frombuffer 用于實現動態數組。 numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0) buffer 可以是任意對象,會以流的形式讀入。 dtype 返回數組的數據類型,可選 count 讀取的數據數量,默認為-1,讀取所有數據。 offset 讀取的起始位置,默認為0。 注意:buffer 是字符串的時候,frombuffer要求是字節串 而Python3 默認 str 是 Unicode 類型, 所以要轉成 bytestring 在原 str 前加上 b。 ''' print("================== np.frombuffer ==================") s = b'Hello World' a = np.frombuffer(s, dtype = 'S1') print (a)''' (9.3) numpy.fromiter 方法從可迭代對象中建立 ndarray 對象,返回一維數組。 numpy.fromiter(iterable, dtype, count=-1) iterable 可迭代對象 dtype 返回數組的數據類型 count 讀取的數據數量,默認為-1,讀取所有數據 ''' print("================== np.fromiter ==================")# 使用 range 函數創建列表對象 lst=range(5) it=iter(lst)# 使用迭代器創建 ndarray a=np.fromiter(it, dtype=float) print(a)#使用reshape print("================== np.reshape ==================")a=np.array([[1,2,3],[4,5,6]]) b=a.reshape((6,)) #array([1, 2, 3, 4, 5, 6]) print(b) c=a.reshape(6) #array([1, 2, 3, 4, 5, 6]) print(c) b[0]=100 #array([100, 2, 3, 4, 5, 6]) print(a)a = np.arange(1,25).reshape(2,3,4) #3個參數,三維數組 print(a)y6 = np.arange(1,9).reshape(-1,2) print(y6)

2.數組的訪問——索引+切片

import numpy as npa = np.arange(10) b = a[2:7:2] # 從索引 2 開始到索引 7 停止,間隔為 2 print ("a[2:7:2] = ", b) print("================================") ''' 如果只放置一個參數,如 [2],將返回與該索引相對應的單個元素。 如果為 [2:],表示從該索引開始以后的所有項都將被提取。 如果使用了兩個參數,如 [2:7],那么則提取兩個索引(不包括停止索引)之間的項。 ''' b = a[2] print ("a[2] = ", b) b = a[2:] print ("a[2:] = ", b) b = a[2:7] print ("a[2:7] = ", b) print("================================")''' 多維數組 ''' a = np.array([[1,2,3],[3,4,5],[4,5,6]]) #二維數組 print("a[0] = ", a[0]) print("a[0][1] = ", a[0][1]) print("a[0,1] = ", a[0,1]) #也可以用逗號,方括號內逗號隔開從左向右依次表示0軸、1軸依次類推 print("a[1,:] = ", a[1,:]) #表示軸0只取第2個元素,軸1方向全取 print("a[1,...] = ", a[1,...]) #用省略號…占住一個軸,該軸的元素全取 print("a[:,0] = ", a[:,0]) #軸0方向全取,但軸1只取第1個元素 print("a[...,0] = ", a[...,0]) print("a[0:2,1:3] = ", a[0:2,1:3]) print("a[0][:] = ", a[0][:]) #相當于一維數組的切片 print("a[:][0] = ", a[:][0]) #這個又不一樣,a[:]相當于整個數組a,所以a[:][0]相當于a[0]# 從某個索引處開始切割 print("================ 二維數組情形 ===================") a = np.array([[1,2,3],[3,4,5],[4,5,6],[5,6,7],[6,7,8]]) #二維數組 print("a[1:] = ",a[1:]) print("a[1:4:2] = ",a[1:4:2])print("================ 三維數組情形 ===================") y = np.array([ [[0,0,0,0],[1,1,1,1]], [[1,1,1,1],[2,2,2,2]], [[2,2,2,2],[3,3,3,3]] ]) #創建三維數組 print("y[1:] = ",y[1:]) print("y[:,0,1:3] = ", y[:,0,1:3]) #軸0方向全都要取,軸1方向只取第一個元素,軸2方向取第2、3個元素

3.數組的訪問——高級索引(布爾索引)

import numpy as npx = np.array([[1,2],[3,4], [5,6]]) #[0,1,2]:0軸上取得元素位置,[0,1,0]:1軸上取得元素位置 #所以取的是x[0][0],x[1][1],x[2][0] print("x[[0,2]] = ", x[ [0,2] ]) print ("x[[0,1,2], [0,1,0]] = ") print(x[[0,1,2],[0,1,0]]) # [1 4 5] print("\n")a = np.array(np.arange(0,16).reshape(4,4)) print("a = ", a) print("\n") print("a[[0,1,2,3],[0,1,2,3]] = ") print(a[[0,1,2,3],[0,1,2,3]]) print("\n") print("a[[1,3], [1,3]] = ") print(a[[1,3], [1,3]]) print("\n") print("a[[3,2,1,0]] = ") print(a[[3,2,1,0]]) #取a的第3、2、1、0行元素print("=============== 借助切片, 與索引數組組合 =================") ''' 如果想取某些行的某幾個元素,比如第0,2行的1,2,3元素 則可以借助切片, 與索引數組組合 ''' print("a[[1,3], 1:3] = ") print(a[[1,3], 1:3]) #第1,3行的1,2元素 print("\n") print("a[1:3, [1,3]] = ") print(a[1:3, [1,3]]) #第1,3列的1,2元素 print("\n") #或者 #np.ix_函數就是輸入兩個數組,產生笛卡爾積的映射關系 print("a[np.ix_([1,3],[1,2])] = ") #取(1,1),(1,2),(3,1),(3,2) 4個元素 print(a[np.ix_([1,3],[1,2])]) print("\n") print("a[np.ix_([1,2],[1,3])] = ") print(a[np.ix_([1,2],[1,3])]) print("\n") print("a[np.ix_([0,2],[1,2,3])] = ") print(a[np.ix_([0,2],[1,2,3])]) print("================================")''' 布爾索引 ''' print("=============== 布爾索引 =================") print("a[[True,False,False,True]] = ") print(a[[True,False,False,True]]) print("\n") print("a[ :, [True,False,False,True] = ") print(a[ :, [True,False,False,True]]) print("\n") print("a[[True,True,False,True],[True,True,False,True]] = ") print(a[[True,True,False,True],[True,True,False,True]]) print("\n") print("a>5 返回:", a>5) print("a[a>5] = ") print(a[a>5]) print("\n") # names = np.array(['Bob', 'Tom', 'Joy', 'Bob', 'Mark'], dtype='<U4') data = np.array([[0.53907488, 0.08239029, 0.49606765, 0.84466126, 0.78326342],[0.64214005, 0.2917917 , 0.96583067, 0.377151 , 0.34873902],[0.82531799, 0.61300945, 0.58824431, 0.16859125, 0.42529735],[0.96789188, 0.08368161, 0.25979403, 0.95384036, 0.77921917],[0.83331394, 0.60851424, 0.10917665, 0.04371444, 0.6726732 ]]) print("========== all man ==========") print(names)print("========== all data ==========") print(data)print("========== Tom\'s data ==========") print(names=="Tom") #[False True False False False] print(data[names=='Tom'])print("========== Bob\'s data ==========") print(data[names=='Bob'])print("========== Tom\'s first and second data ==========") print(data[names=='Tom', :2]) #與切片配合print("========== data except Tom\'s ==========") print(data[names!='Tom'])print(data[~(names=='Tom')])print("========== Tom and Bob\'s data ==========") print(data[(names=='Bob') & (names=='Tom')])print("========== Tom or Bob\'s data ==========") print(data[(names=='Bob') | (names=='Tom')])x=np.array([1,-1,-2,3]) x[x<0]+=20 #所有小于0的x中的元素+20 print("========== X ===========") print(x)

4.數組形狀變換

import numpy as np''' numpy.reshape 函數可以在不改變數據的條件下修改形狀 ''' print("=============== numpy.reshape() ==================") a = np.arange(8) print ('原始數組:') print (a) print ('\n')b = a.reshape(4,2) print ('修改后的數組:') print (b) b[0][1]=100 print (b) print (a)''' numpy.ndarray.flat 是一個數組元素迭代器 ''' print("=============== numpy.ndarray.flat ==================") a = np.arange(9).reshape(3,3) print ('原始數組:') print(a) for row in a:#迭代每一行print (row)#對數組中每個元素都進行處理,可以使用flat屬性,該屬性是一個數組元素迭代器: print ('迭代后的數組:') for element in a.flat:print (element)''' numpy.ndarray.flatten 返回一份數組展開后的拷貝,即,變為一維的, 對拷貝所做的修改不會影響原始數組 ''' print("=============== numpy.ndarray.flatten() ==================") a = np.arange(8).reshape(2,4) print ('原數組:') print (a) print ('\n') # 默認按行 print ('展開的數組:') b = a.flatten() print (b) b[0] = -1 print("修改flatten后的數組后") print("a = ", a) print("b = ", b) print ('\n')print ('以 F 風格順序(按列)展開的數組:') print (a.flatten(order = 'F'))''' numpy.ravel() 展開數組元素,順序通常是"C風格"(按行), 返回的是數組視圖, 修改會影響原始數組。 ''' print("=============== numpy.ndarray.ravel() ==================") a = np.arange(8).reshape(2,4) print ('原數組:') print (a) print ('\n') print ('調用 ravel 函數之后:') b = a.ravel() print (b) b[0] = -1 print("修改ravel后的數組后") print("a = ", a) print("b = ", b) print ('\n')print ('以 F 風格順序(按列)調用 ravel 函數之后:') print (a.ravel(order = 'F'))''' numpy.transpose 函數用于對換數組的維度,格式如下: numpy.transpose(arr, axes) arr:要操作的數組 axes:整數列表,對應維度,通常所有維度都會對換。 主要就是:轉置,當然只有在矩陣里才叫轉置 ''' print("=============== numpy.transpose() ==================") a = np.arange(12).reshape(3,4) print ('原數組:') print (a ) print ('\n')print ('transpose轉置后的數組:') print (np.transpose(a)) #numpy.ndarray.T 類似 numpy.transpose: print ('數組a.T:') print (a.T) print ('\n')''' numpy.concatenate 函數用于沿指定軸連接相同形狀的兩個或多個數組, 格式:numpy.concatenate((a1, a2, ...), axis) 參數說明: a1, a2, ...:相同類型的數組 axis:沿著它連接數組的軸,默認為 0''' print("=============== numpy.concatenate() ==================") a = np.array([[1,2],[3,4]]) print ('第一個數組:') print (a) print ('\n') b = np.array([[5,6],[7,8]])print ('第二個數組:') print (b) print ('\n') # 兩個數組的維度相同 print ('沿軸 0 連接兩個數組:') print (np.concatenate((a,b))) print ('\n')print ('沿軸 1 連接兩個數組:') print (np.concatenate((a,b),axis = 1))''' numpy.stack 函數用于沿新軸連接數組序列,格式如下: numpy.stack(arrays, axis) 參數說明: arrays相同形狀的數組序列 axis:數組中的軸,輸入數組沿著它來連接 返回的結果比arrays多一個維度''' print("=============== numpy.stack() ==================") a = np.array([[1,2],[3,4]]) print ('第一個數組:') print (a) print ('\n') b = np.array([[5,6],[7,8]])print ('第二個數組:') print (b) print ('\n')print ('沿軸 0 堆疊兩個數組:') print (np.stack((a,b),0)) print ('\n')print ('沿軸 1 堆疊兩個數組:') print (np.stack((a,b),1))''' numpy.hstack 是 numpy.stack 函數的變體,它通過水平堆疊來生成數組。 其實更像是數組連接concatenate ''' print("=============== numpy.hstack() ==================") a = np.array([[1,2],[3,4]]) print ('第一個數組:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('第二個數組:') print (b) print ('\n') print ('水平堆疊:') c = np.hstack((a,b)) print (c) print ('\n')''' numpy.vstack 是 numpy.stack 函數的變體,它通過垂直堆疊來生成數組。 其實更像是數組連接concatenate ''' print("=============== numpy.vstack() ==================") a = np.array([[1,2],[3,4]]) print ('第一個數組:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('第二個數組:') print (b) print ('\n') print ('豎直堆疊:') c = np.vstack((a,b)) print (c)''' numpy.resize 函數返回指定大小的新數組。 如果新數組大小大于原始大小,則包含原始數組中的元素的副本。 numpy.resize(arr, shape) 參數說明: arr:要修改大小的數組 shape:返回數組的新形狀''' print("=============== numpy.resize() ==================") a = np.array([[1,2,3],[4,5,6]]) print ('第一個數組:') print (a) print ('\n') print ('第一個數組的形狀:') print (a.shape) print ('\n') b = np.resize(a, (3,2)) print ('第二個數組:') print (b) print ('\n') print ('第二個數組的形狀:') print (b.shape) print ('\n') # 要注意 a 的第一行在 b 中重復出現,因為尺寸變大了. # 廣播? print ('修改第二個數組的大小:') b = np.resize(a,(3,3)) print (b)''' numpy.append 函數在數組的末尾添加值。 追加操作會分配整個數組,并把原來的數組復制到新數組中。 此外,輸入數組的維度必須匹配否則將生成ValueError。 numpy.append(arr, values, axis=None) 參數說明: arr:輸入數組 values:要向arr添加的值,需要和arr形狀相同(除了要添加的軸) axis:默認為 None。當axis無定義時,是橫向加成,返回總是為一維數組! 當axis有定義的時候,分別為0和1的時候(列數要相同)。當axis為1時,數組是加在右邊(行數要相同)。 ''' print("=============== numpy.append() ==================") a = np.array([[1,2,3],[4,5,6]]) print ('第一個數組:') print (a) print ('\n') print ('向數組添加元素:') print (np.append(a, [7,8,9])) print ('\n') print ('沿軸 0 添加元素:') print (np.append(a, [[5,5,5],[7,8,9]],axis = 0)) print ('\n') print ('沿軸 1 添加元素:') print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))''' numpy.insert 函數在給定索引之前,沿給定軸在輸入數組中插入值。 如果值的類型轉換為要插入,則它與輸入數組不同。 插入沒有原地的,函數會返回一個新數組。 此外,如果未提供軸,則輸入數組會被展開。 numpy.insert(arr, obj, values, axis) 參數說明: arr:輸入數組 obj:在其之前插入值的索引 values:要插入的值 axis:沿著它插入的軸,如果未提供,則輸入數組會被展開 ''' print("=============== numpy.insert() ==================") a = np.array([[1,2],[3,4],[5,6]]) print ('第一個數組:') print (a) print ('\n') print ('未傳遞 axis 參數。 在插入之前輸入數組會被展開。') print (np.insert(a,3,[11,12])) print ('\n') print ('傳遞了 axis 參數。 會廣播值數組來匹配輸入數組。') print ('沿軸 0 廣播:') print (np.insert(a,1,[11],axis = 0)) print ('\n') print ('沿軸 1 廣播:') print (np.insert(a,1,11,axis = 1))''' numpy.delete 函數返回從輸入數組中刪除指定子數組的新數組。 與 insert() 函數的情況一樣,如果未提供軸參數,則輸入數組將展開。 numpy.delete(arr, obj, axis) 參數說明: arr:輸入數組 obj:可以被切片,整數或者整數數組,表明要從輸入數組刪除的子數組(索引) axis:沿著它刪除給定子數組的軸,如果未提供,則輸入數組會被展開 ''' print("=============== numpy.delete() ==================") a = np.arange(12).reshape(3,4) a[1] = np.array([20,21,22,23]) print ('第一個數組:') print (a) print ('\n') print ('未傳遞 axis 參數。 在刪除之前輸入數組會被展開。') print (np.delete(a,5)) print ('\n') print ('刪除第一行:') print (np.delete(a,0,axis = 0)) print ('\n') print ('刪除第二列:') print (np.delete(a,1,axis = 1)) print ('\n') print ('包含從數組中刪除的替代值的切片:') a = np.array([1,2,3,4,5,6,7,8,9,10]) print (np.delete(a, np.s_[::2])) #np.s_[::2]構造一個切片,從頭到尾,步長為2''' numpy.unique 函數用于去除數組中的重復元素。 numpy.unique(arr, return_index, return_inverse, return_counts) arr:輸入數組,如果不是一維數組則會展開 return_index:如果為true,返回新列表元素在舊列表中的位置(下標),并以列表形式儲 return_inverse:如果為true,返回舊列表元素在新列表中的位置(下標),并以列表形式儲 return_counts:如果為true,返回去重數組中的元素在原數組中的出現次數 ''' print("=============== numpy.unique() ==================") a = np.array([5,2,6,2,7,5,6,8,2,9]) print ('第一個數組:') print (a) print ('\n') print ('第一個數組的去重值:') u = np.unique(a) print (u) print ('\n') u,indices = np.unique(a, return_index = True) print ('新列表{}各元素在舊列表中的位置為:{}'.format(u,indices)) print ('\n') u,indices = np.unique(a,return_inverse = True) print ('舊列表{}各元素在新列表{}中的位置為:\n{}'.format(a,u,indices)) print ('\n') print ('使用下標重構原數組:') print (u[indices]) print ('\n') u,count = np.unique(a,return_counts = True) print ('新列表{}各元素在舊列表{}中的數量為:\n{}'.format(u,a,count))

5.數組基本運算

import numpy as np''' 數組的+、-、*、/、//運算,要求參與運算的數組要同樣大小,即維度和元素個數相同。 即,對應元素進行運算 ''' #對應元素進行運算 A = np.array([[1, 2],[3, 4],[5, 6]]) B = np.array([[10, 20],[30, 40],[50, 60]]) print("A+B = ", A+B) print("A*B = ", A*B)#每個元素都進行同樣的運算 print("A+2 = ", A+2) print("A*2 = ", A*2) b = [[2,2],[2,2],[2,2]] print("A+b = ", A+b) #支持+=、/=、-=、*=這類運算符號 #并不會創建一個新的數組,而是直接對原來數組的元素值進行修改。 A += 2 print("A+=2后, A = ", A)#如果將二維數組視為矩陣,那么矩陣乘法為np.dot: A = np.array([[1, 2],[3, 4],[5, 6],[7, 8]]) B = np.array([[2, 3, 4, 5],[6, 7, 8, 9]]) print(np.dot(A, B))#數組向量乘 A = np.array([[1, 2],[3, 4],[5, 6]]) x = np.array([[4, 5]]).T print(np.dot(A, x))

6.數組運算時的廣播機制

import numpy as npa = np.array([1,2,3]) b = 2 print("a = ", a) print("b = ", b) print("a * b = ", a*b) print("=====================")a = np.zeros((2,3,4)) b = np.zeros((3,4)) print("a.shape = ", a.shape) print("b.shape = ", b.shape) print("(a+b).shape = ",(a+b).shape) # 輸出 (2, 3, 4) a = np.array([[[1,1,1,1],[2,2,2,2],[3,3,3,3]],[[4,4,4,4],[5,5,5,5],[6,6,6,6]]]) print("a = ", a) print("a.shape = ", a.shape) b = np.array([[1,1,1,1],[2,2,2,2],[3,3,3,3]]) print("b = ", b) print("b.shape = ", b.shape) c = a + b print("a + b = ", c) print("(a+b).shape = ", c.shape) print("=====================")a = np.array([[0],[1],[2],[3]]) print("a = ", a) print("a.shape = ", a.shape) b = np.array([1,2,3]) print("b = ", b) print("b.shape = ", b.shape) c = a + b print("a + b = ", c) print("(a+b).shape = ", c.shape) print("=====================")#下面的A+B會報錯 ''' A = np.zeros((2,5,3,4)) B = np.zeros((3,3)) print((A+B).shape) ''' # a = np.random.randn(4,3) print("a = ", a) print("a.shape = ", a.shape) amean1 = a.mean(1) print("amean1 = ", amean1) print("amean1.shape = ", amean1.shape) amean1 = amean1.reshape(4,1) print("new amean1 = ", amean1) print("new amean1.shape = ", amean1.shape) b = a - amean1 print(b)

7.numpy數學函數示例-三角函數

import numpy as npa = np.array([0,30,45,60,90]) print ('含有正弦值的數組:') sin = np.sin(a*np.pi/180) print (sin) print ('\n') print ('計算角度的反正弦,返回值以弧度為單位:') inv = np.arcsin(sin) print (inv) print ('\n') print ('通過轉化為角度制來檢查結果:') print (np.degrees(inv)) #弧度轉為角度 print ('\n') print ('arccos 和 arctan 函數行為類似:') cos = np.cos(a*np.pi/180) print (cos) print ('\n') print ('反余弦:') inv = np.arccos(cos) print (inv) print ('\n') print ('角度制單位:') print (np.degrees(inv)) print ('\n') print ('tan 函數:') tan = np.tan(a*np.pi/180) print (tan) print ('\n') print ('反正切:') inv = np.arctan(tan) print (inv) print ('\n') print ('角度制單位:') print (np.degrees(inv))

8.numpy數學函數示例-取整函數

import numpy as npprint("=============== numpy.around() ================") ''' numpy.around(a,decimals) 返回指定數字的舍入值,向偶數舍入。 參數說明:a: 數組 decimals: 舍入的小數位數。 默認值為0。 ''' a = np.array([1.0,5.45, 5.55, 123, 0.567, 25.532, 0.5, 1.5, 2.5, 3.5]) print ('原數組:') print (a) print ('\n') print ('舍入后:') print (np.around(a)) print (np.around(a, decimals = 1))print("=============== numpy.floor() ================") ''' numpy.floor() numpy.floor() 返回小于或者等于指定表達式的最大整數,即向下取整。 ''' a = np.array([-1.7, 1.5, -0.2, 0.6, 10]) print ('提供的數組:') print (a) print ('\n') print ('修改后的數組:') print (np.floor(a))print("=============== numpy.ceil() ================") ''' numpy.ceil() 返回大于或者等于指定表達式的最小整數,即向上取整。 ''' a = np.array([-1.7, 1.5, -0.2, 0.6, 10]) print ('提供的數組:') print (a) print ('\n') print ('修改后的數組:') print (np.ceil(a))

9.numpy數學函數示例-算術函數

import numpy as npprint("=============== 加減乘除 ================") ''' NumPy 算術函數包含簡單的加減乘除: add(),subtract(),multiply() 和 divide()。需要注意的是數組必須具有相同的形狀或符合數組廣播規則 ''' a = np.arange(9, dtype = np.float_).reshape(3,3) #np.float_/np.float64 print ('第1個數組:') print (a) print ('\n') print ('第2個數組:') b = np.array([10,10,10]) print (b) print ('\n') print ('兩個數組相加:') print (np.add(a,b)) print ('\n') print ('兩個數組相減:') print (np.subtract(a,b)) print ('\n') print ('兩個數組相乘:') print (np.multiply(a,b)) print ('\n') print ('兩個數組相除:') print (np.divide(a,b))print ('第3個數組:') b = np.array([[10,10,10],[5,5,5],[2,2,2]]) print (b) print ('\n') print ('兩個數組相加:') print (np.add(a,b)) print ('\n') print ('兩個數組相減:') print (np.subtract(a,b)) print ('\n') print ('兩個數組相乘:') print (np.multiply(a,b)) print ('\n') print ('兩個數組相除:') print (np.divide(a,b))print("=============== numpy.reciprocal() ================") ''' numpy.reciprocal() numpy.reciprocal() 函數返回參數逐元素的倒數。如 1/4 倒數為 4/1 ''' a = np.array([0.25, 1.33, 1, 100]) print ('我們的數組是:') print (a) print ('\n') print ('調用 reciprocal 函數:') print (np.reciprocal(a))print("=============== numpy.power() ================") ''' numpy.power() 將第一個輸入數組中的元素作為底數,計算它與第二個輸入數組中相應元素的冪。 ''' a = np.array([10,100,1000]) print ('我們的數組是;') print (a) print ('\n') print ('調用 power 函數:') print (np.power(a,2)) print ('\n') print ('第二個數組:') b = np.array([1,2,3]) print (b) print ('\n') print ('再次調用 power 函數:') print (np.power(a,b))print("=============== numpy.mod() ================") ''' numpy.mod():計算輸入數組中相應元素的相除后的余數。 函數 numpy.remainder() 也產生相同的結果。 ''' a = np.array([10,20,30]) b = np.array([3,5,7]) print ('第一個數組:') print (a) print ('\n') print ('第二個數組:') print (b) print ('\n') print ('調用 mod() 函數:') print (np.mod(a,b)) print ('\n') print ('調用 remainder() 函數:') print (np.remainder(a,b))

10.numpy數學函數示例-統計函數

import numpy as npprint("=============== 最大最小值 amin amax================") ''' numpy.amin() 和 numpy.amax() numpy.amin() 用于計算數組中的元素沿指定軸的最小值。numpy.amax() 用于計算數組中的元素沿指定軸的最大值。 ''' a = np.array([[3,7,5],[8,4,3],[2,4,9]]) print ('我們的數組是:') print (a) print ('\n') print ('沿軸1,調用 amin() 函數:') print (np.amin(a,1)) #軸1 print ('\n') print ('沿軸0,調用 amin() 函數:') print (np.amin(a,0)) #軸0 print ('\n') print ('調用 amin() 函數:') print (np.amin(a)) print ('\n') print ('沿軸1,調用 amax() 函數:') print (np.amax(a,1)) print ('\n') print ('沿軸0,調用 amax() 函數:') print (np.amax(a, axis = 0)) print ('\n') print ('調用 amax() 函數:') print (np.amax(a)) print ('\n')print("=============== 最大值與最小值的差 numpy.ptp() ================") ''' numpy.ptp() 計算數組中元素最大值與最小值的差(最大值 - 最小值)。 ''' a = np.array([[3,7,5],[8,4,3],[2,4,9]]) print ('我們的數組是:') print (a) print ('\n') print ('調用 ptp() 函數:') print (np.ptp(a)) print ('\n') print ('沿軸 1 調用 ptp() 函數:') print (np.ptp(a, axis = 1)) print ('\n') print ('沿軸 0 調用 ptp() 函數:') print (np.ptp(a, axis = 0)) print ('\n')print("=============== 百分位數 numpy.percentile() ================") ''' 百分位數是統計中使用的度量,表示小于這個值的觀察值的百分比。 numpy.percentile(a, q, axis) 參數說明: a: 輸入數組 q: 要計算的百分位數,在 0 ~ 100 之間 axis: 沿著它計算百分位數的軸 ''' a = np.array([[10, 7, 4], [3, 2, 1]]) print ('我們的數組是:') print (a) print("\n") print ('調用 percentile(a,50) 函數:') # 50% 的分位數,就是 a 里排序之后的中位數 print (np.percentile(a, 50)) print("\n") # axis 為 0,在縱列上求 print ('調用 percentile(a ,50, axis=0) 函數:') print (np.percentile(a, 50, axis=0)) print("\n") # axis 為 1,在橫行上求 print ('調用 percentile(a ,50, axis=1) 函數:') print (np.percentile(a, 50, axis=1)) print("\n") # 保持維度不變 print ('調用 percentile(a ,50, axis=1, keepdims=True) 函數:') print (np.percentile(a, 50, axis=1, keepdims=True))print("=============== 中位數 numpy.median() ================") ''' numpy.median() 函數用于計算數組 a 中元素的中位數(中值) ''' a = np.array([[30,65,70],[80,95,10],[50,90,60]]) print ('我們的數組是:') print (a) print ('\n') print ('調用 median() 函數:') print (np.median(a)) print ('\n') print ('沿軸 0 調用 median() 函數:') print (np.median(a, axis = 0)) print ('\n') print ('沿軸 1 調用 median() 函數:') print (np.median(a, axis = 1))print("=============== numpy.mean() ================") ''' numpy.mean() 函數返回數組中元素的算術平均值。 如果提供了軸,則沿其計算。 ''' a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print ('我們的數組是:') print (a) print ('\n') print ('調用 mean() 函數:') print (np.mean(a)) print ('\n') print ('沿軸 0 調用 mean() 函數:') print (np.mean(a, axis = 0)) print ('\n') print ('沿軸 1 調用 mean() 函數:') print (np.mean(a, axis = 1))print("=============== 加權平均值 numpy.average() ================") ''' numpy.average() 根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值。該函數可以接受一個軸參數。 如果沒有指定軸,則數組會被展開。考慮數組[1,2,3,4]和相應的權重[4,3,2,1], 通過將相應元素的乘積相加,并將和除以權重的和,來計算加權平均值。 ''' a = np.array([1,2,3,4]) print ('我們的數組是:') print (a) print ('\n') print ('未指定權重,調用 average() 函數:') print (np.average(a)) print ('\n') # 不指定權重時相當于 mean 函數 wts = np.array([4,3,2,1]) print ('指定權重數組是:') print (wts) print ('指定權重,調用 average() 函數:') print (np.average(a,weights = wts)) print ('\n') # 如果 returned 參數設為 true,則返回權重的和 print ('加權平均值以及權重的和:') print (np.average([1,2,3,4],weights = [4,3,2,1], returned = True)) print("\n") #多維數組,指定軸 print("多維數組,指定軸") a = np.arange(6).reshape(3,2) print ('我們的數組是:') print (a) print ('\n') print ('指定權重數組是:') wt = np.array([3,5]) print (wt) print ('沿軸1,加權平均值:') print (np.average(a, axis = 1, weights = wt)) print ('\n') print ('沿軸1,加權平均值以及權重的和:') print (np.average(a, axis = 1, weights = wt, returned = True)) print ('\n') print("=============== 方差 var() 標準差 std() ================") ''' 方差: var = mean((x - x.mean())** 2) 標準差: std = sqrt(mean((x - x.mean())**2)) ''' print (np.var([1,2,3,4])) print (np.std([1,2,3,4]))

?11.矩陣創建和類型轉換

import numpy as nparray2 = np.arange(1,5) #創建一維數組 print("array2 = ", array2) print(array2.ndim) #輸出array2的維數為1 print(array2.shape) #輸出array2的形狀,行為4元素,列無 print(type(array2)) #輸出array2的類型,N維數組類型mat5 = np.mat(array2) #利用mat()對一維數組創建矩陣mat5 print("mat5 = ", mat5) #輸出mat5 print(type(mat5)) print(mat5.ndim) #輸出mat5的維數為2 print(mat5.shape) #輸出mat5的形狀,1行4列 print("\n")list1 = [[1,2,3,4],[5,6,7,8]] array1 = np.array(list1) print("array1 = ", array1) mat4 = np.mat(array1) print("mat4 = ", mat4) mat4[0,0] = -100 print("更改mat4[0,0]后的新mat4 = ", mat4) print("此時array1 = ", array1) #說明np.mat返回視圖 print("\n")array2 = np.array([1,2,3,4]) mat5 = np.mat(array2) print("mat5 = ", mat5) mat5[0]=-100 print("更改mat5[0]=-100后的新mat5 = ", mat5) print("此時數組array2 = ", array2) #說明np.mat返回視圖 print("\n")array2 = [1,2,3,4] mat5 = np.mat(array2) print("mat5 = ", mat5) mat5[0]=-100 print("更改mat5[0]=-100后的新mat5 = ", mat5) print("此時列表array2 = ", array2) #不影響序列print("====================================") ''' 列表、數組、矩陣間的相互轉換 ''' list1 = [[0,1,2,3],[4,5,6,7]] array1 = np.array(list1) #列表轉為數組 print("array1 type = ", type(array1)) print("array1 = ", array1) mat1 = np.mat(array1) #數組轉為矩陣 print("mat1 type = ", type(mat1)) print("mat1 = ", mat1) array2 = np.array(mat1) #矩陣轉為數組 print("array2 type = ", type(array2)) print("array2 = ", array2) array3 = mat1.getA() #矩陣轉為數組 print("array3 type = ", type(array3)) print("array3 = ", array3) list2 = mat1.tolist() #矩陣轉為列表 print("list2 from mattolist type = ", type(list2)) print("list2 = ", list2) list3 = array3.tolist() #數組轉為列表 print("list3 from arraytolist type = ", type(list3)) print("list3 = ", list3) #array1(mat)--> mat1 (np.array(mat1)) --> array2 array2[0]=-999 print("new array2 = ", array2) print("array1 = ", array1) #array1(mat)--> mat1 (getA) --> array3 array3[0]=-100 print("new array3 = ", array3) print("array1 = ", array1)

12.矩陣運算

import numpy as np ''' 矩陣的加減乘運算 ''' a = np.mat(np.arange(1,7).reshape(2,3))b = a print("a = ", a) print("b = ", b) print("a + b = ", a + b) #矩陣相加,同型矩陣print("a - b = ", a - b) #矩陣相減,同型矩陣print("======================================")c = np.mat(np.arange(1,7).reshape(3,2)) print("c = ", c)print("a * c = ", a * c) #矩陣相乘,a的列數等于矩陣c的行數 print("np.dot(a,c) = ", np.dot(a,c)) print("2 * a = ", 2 * a) #數乘矩陣 print("a * 2 = ", a * 2)''' 矩陣的轉置和求逆 ''' print("a.T = ", a.T) #矩陣轉置 print("a.I = ", a.I) #求逆矩陣''' 矩陣的求和及索引 ''' print("矩陣每一列的和 = ", a.sum(axis = 0)) #計算矩陣每一列的和print("矩陣每一行的和 = ", a.sum(axis = 1)) #計算矩陣每一行的和print("矩陣每一列的最大值 = ", a.max(axis = 0)) #計算矩陣每一列的最大值print("矩陣每一行的最大值 = ", a.max(axis = 1)) #計算矩陣每一行的最大值print("矩陣每一列的最大值索引 = ", a.argmax(axis = 0)) #計算矩陣每一列的最大值索引print("矩陣矩陣每一行的最大值索引 = ", a.argmax(axis = 1)) #計算矩陣每一行的最大值索引''' 矩陣的分割和合并 ''' print("======================== 矩陣的分割和合并 ================") mat1 = np.mat(np.arange(20).reshape(4,5)) print("矩陣mat1 = ", mat1)#分割出行2(含)到最后行;列3(含)到最后列,所有元素 mat2 = mat1[2:,3:] print("矩陣mat1 行2(含)到最后行;列3(含)到最后列的所有元素 = \n", mat2)#分割出開始到行2(不含);所有列,所有元素 mat3 = mat1[:2,:] print("矩陣mat1 開始到行2(不含);所有列,所有元素, mat3= \n", mat3)#分割出行2(含)到最后行;所有列,所有元素 mat4 = mat1[2:,:] print("矩陣mat1 行2(含)到最后行;所有列,所有元素 = \n", mat4)#分割出行2(含)到最后行;所有列,所有元素 mat4 = mat1[2:] print("矩陣mat1 行2(含)到最后行;所有列,所有元素, mat4 = \n", mat4)''' #沿著第一個軸(軸0)堆疊數組。 #即列數不變,拼起每一行如果是一維數組進行堆疊,則數組長度必須相同; 除此之外,其它數組堆疊時,除數組第一個軸的長度可以不同, 其它軸長度必須一樣。 ''' mat5 = np.vstack((mat3,mat4)) print("mat3,mat4按軸0堆疊合并 = ", mat5)''' #沿著第二個軸(軸1)堆疊數組。 #即行數不變,拼起每一列除了一維數組的堆疊可以是不同長度外, 其它數組堆疊時,除了第二個軸的長度可以不同外,其它軸的長度必須相同。 ''' mat6 = np.hstack((mat3,mat4)) print("mat3,mat4按軸1堆疊合并 = ", mat6)

13.矩陣庫matlib使用

import numpy.matlib import numpy as np''' matlib.empty() 函數返回一個新的矩陣,語法格式為:numpy.matlib.empty(shape, dtype, order) 參數說明:shape: 定義新矩陣形狀的整數或整數元組 Dtype: 可選,數據類型 order: C(行序優先) 或者 F(列序優先) ''' print("============== numpy.matlib.empty ============") print (np.matlib.empty((2,2))) # 填充為隨機數據''' numpy.matlib.zeros() 函數創建一個以 0 填充的矩陣。 ''' print("============== numpy.matlib.zeros ============") print (np.matlib.zeros((2,2)))''' numpy.matlib.ones()函數創建一個以 1 填充的矩陣。 ''' print("============== numpy.matlib.ones ============") print (np.matlib.ones((2,2)))''' numpy.matlib.eye(n, M,k, dtype) 返回一個矩陣,對角線元素為 1,其他位置為零。參數說明:n: 矩陣的行數 M: 矩陣的列數,默認為 n k: 對角線的索引 dtype: 數據類型 ''' print("============== numpy.matlib.eye ============") print (np.matlib.eye(n = 3, M = 4, k = 0, dtype = float))''' numpy.matlib.identity() 函數返回給定大小的單位矩陣。 ''' print("============== numpy.matlib.identity ============") # 大小為 5,類型位浮點型 print (np.matlib.identity(5, dtype = float))''' numpy.matlib.rand() 函數創建一個給定大小的矩陣 數據是服從[0,1)區間的均勻分布的隨機數。。 ''' print("============== numpy.matlib.rand ============") print (np.matlib.rand(3,3))''' numpy.matlib.rand() 函數創建一個給定大小的矩陣, 數據是服從標準正態分布的隨機數。 ''' print("============== numpy.matlib.randn ============") print (np.matlib.randn(3,3))''' numpy.matlib.repmat 函數功能概述: repmat~repeat matrix,由傳入的矩陣復制產生新矩陣參數解析:a是復制源頭,m是行的倍數,n是列的倍數demo解析:傳入的a2本身是 23矩陣, repmat(a2,7, 3)把a2 的行數乘以7,列數乘以3,得到的矩陣是(27)(33)=14*9 ''' print("============== numpy.matlib.repmat ============") a1 = np.arange(4) a11 = np.matlib.repmat(a1, 2, 2) print(type(a11)) print(a11)a2 = np.asmatrix(np.arange(6).reshape(2,3)) a3 = np.matlib.repmat(a2,7,3) print(type(a2)) print(a2) print(type(a3)) print(a3)

目錄

1.簡介

2.安裝

3.使用方法(代碼匯總非原創)

1.創建數組

2.數組的訪問——索引+切片

3.數組的訪問——高級索引(布爾索引)

4.數組形狀變換

5.數組基本運算

6.數組運算時的廣播機制

7.numpy數學函數示例-三角函數

8.numpy數學函數示例-取整函數

9.numpy數學函數示例-算術函數

10.numpy數學函數示例-統計函數

?11.矩陣創建和類型轉換

12.矩陣運算

13.矩陣庫matlib使用


import numpy as np import scipy from scipy import linalg#矩陣的秩 A_1 = np.array([[1, 1, 0],[1, 0, 1]])A_2 = np.array([[1, 2, -1],[2, 4, -2]])A_3 = np.array([[1, 0],[0, 1],[0, -1]])A_4 = np.array([[1, 2],[1, 2],[-1, -2]])A_5 = np.array([[1, 1, 1],[1, 1, 2],[1, 2, 3]])print(np.linalg.matrix_rank(A_1)) print(np.linalg.matrix_rank(A_2)) print(np.linalg.matrix_rank(A_3)) print(np.linalg.matrix_rank(A_4)) print(np.linalg.matrix_rank(A_5))print ("矩陣行列式:", np.linalg.det(A_5)) #求矩陣的逆 A = np.array([[1, 35, 0],[0, 2, 3],[0, 0, 4]]) ainv = np.linalg.inv(A) print ('A 的逆ainv:',ainv)A_n = linalg.inv(A) print('A 的逆:A_n',A_n)print(np.dot(A, A_n)) #一個不可逆矩陣 ##B = np.array([[1, 0, 2], ## [0, 1, 3], ## [1, 1, 5]]) ##B_n = linalg.inv(B) ##print(B_n)#求解線性方程組 A = np.array([[1, 2, 3],[1, -1, 4],[2, 3, -1]])y = np.array([14, 11, 5]) x = np.linalg.solve(A,y) print("線性方程組的解為: x=",x) x = linalg.solve(A, y) print("線性方程組的解為: x=",x)lu, piv = linalg.lu_factor(A) print(lu) print(piv) x = linalg.lu_solve((lu, piv), y) print("線性方程組的解為: x=",x)#求矩陣的特征值和特征向量(eigenvalue,eigenvector) #與筆算結果比較一下 #以下兩個例子為特征值兩兩不等的情況 A = np.array([[2, 1],[1, 2]]) evalue, evector = np.linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector) evalue, evector = linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector) print("===================") A = np.array([[1, 0, 0],[0, 2, 0],[0, 0, 5]]) evalue, evector = np.linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector) evalue, evector = linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector) print("===================") #以下的例子有相同的特征值 #這個例子可以找到3個線性無關的特征向量 A = np.array([[1, 6, 0],[2, 2, 0],[0, 0, 5]])evalue, evector = np.linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector) evalue, evector = linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector) print("===================") #下面的例子無法找到3個線性無關的特征向量 A = np.array([[6, -2, 1],[0, 4, 0],[0,0,6]])evalue, evector = linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector)#中英文均有的數據,可以考慮用genfromtxt ''' delimiter: the str used to separate data. 如本例中橫縱坐標以 ',' 分割,因此給 delimiter 傳入 ','。 skip_header: the number of lines to skip at the beginning of the file. dtype:數據類型 ''' data2=np.genfromtxt('test2.txt',skip_header=0,dtype='U',delimiter=',') print(data2) ''' #中英文均有的數據,用loadtxt處理時會有一些問題,比如下面的就會報錯 info = np.loadtxt('test2.txt', dtype=bytes, delimiter=',', unpack=False) print(info) '''

總結

以上是生活随笔為你收集整理的【Python】numpy库和scipy库的安装与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。