日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/8/1 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】numpy库和scipy库的安装与使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.簡(jiǎn)介

numpy是一個(gè)用Python實(shí)現(xiàn)的科學(xué)計(jì)算包,專(zhuān)為進(jìn)行嚴(yán)格的數(shù)值處理而產(chǎn)生,尤其是對(duì)大型多維數(shù)組和矩陣的支持,并且有一個(gè)大型的高級(jí)數(shù)學(xué)函數(shù)庫(kù)來(lái)操作這些數(shù)組。numpy提供了許多高級(jí)的數(shù)值編程工具,如實(shí)用的線性代數(shù)運(yùn)算、傅立葉變換、隨機(jī)數(shù)產(chǎn)生等。

scipy(高級(jí)科學(xué)計(jì)算庫(kù))和numpy聯(lián)系很密切,scioy一般都是操控numpy數(shù)組來(lái)進(jìn)行科學(xué)計(jì)算、統(tǒng)計(jì)分析,所以可以說(shuō)是基于numpy之上了。scipy有很多子模塊可以應(yīng)對(duì)不同的應(yīng)用,例如插值運(yùn)算,優(yōu)化算法等等。scipy則是在numpy的基礎(chǔ)上構(gòu)建的更為強(qiáng)大,應(yīng)用領(lǐng)域也更為廣泛的科學(xué)計(jì)算包。正是出于這個(gè)原因,scipy需要依賴(lài)numpy的支持進(jìn)行安裝和運(yùn)行。

2.安裝

①先安裝numpy,打開(kāi)cmd命令行輸入

pip install numpy

②安裝scipy同理

pip3 install scipy

效果如圖:

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

1.創(chuàng)建數(shù)組

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

2.數(shù)組的訪問(wèn)——索引+切片

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

3.數(shù)組的訪問(wèn)——高級(jí)索引(布爾索引)

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("=============== 借助切片, 與索引數(shù)組組合 =================") ''' 如果想取某些行的某幾個(gè)元素,比如第0,2行的1,2,3元素 則可以借助切片, 與索引數(shù)組組合 ''' 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_函數(shù)就是輸入兩個(gè)數(shù)組,產(chǎn)生笛卡爾積的映射關(guān)系 print("a[np.ix_([1,3],[1,2])] = ") #取(1,1),(1,2),(3,1),(3,2) 4個(gè)元素 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.數(shù)組形狀變換

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

5.數(shù)組基本運(yùn)算

import numpy as np''' 數(shù)組的+、-、*、/、//運(yùn)算,要求參與運(yùn)算的數(shù)組要同樣大小,即維度和元素個(gè)數(shù)相同。 即,對(duì)應(yīng)元素進(jìn)行運(yùn)算 ''' #對(duì)應(yīng)元素進(jìn)行運(yùn)算 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)#每個(gè)元素都進(jìn)行同樣的運(yùn)算 print("A+2 = ", A+2) print("A*2 = ", A*2) b = [[2,2],[2,2],[2,2]] print("A+b = ", A+b) #支持+=、/=、-=、*=這類(lèi)運(yùn)算符號(hào) #并不會(huì)創(chuàng)建一個(gè)新的數(shù)組,而是直接對(duì)原來(lái)數(shù)組的元素值進(jìn)行修改。 A += 2 print("A+=2后, A = ", A)#如果將二維數(shù)組視為矩陣,那么矩陣乘法為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))#數(shù)組向量乘 A = np.array([[1, 2],[3, 4],[5, 6]]) x = np.array([[4, 5]]).T print(np.dot(A, x))

6.數(shù)組運(yùn)算時(shí)的廣播機(jī)制

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會(huì)報(bào)錯(cuò) ''' 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數(shù)學(xué)函數(shù)示例-三角函數(shù)

import numpy as npa = np.array([0,30,45,60,90]) print ('含有正弦值的數(shù)組:') sin = np.sin(a*np.pi/180) print (sin) print ('\n') print ('計(jì)算角度的反正弦,返回值以弧度為單位:') inv = np.arcsin(sin) print (inv) print ('\n') print ('通過(guò)轉(zhuǎn)化為角度制來(lái)檢查結(jié)果:') print (np.degrees(inv)) #弧度轉(zhuǎn)為角度 print ('\n') print ('arccos 和 arctan 函數(shù)行為類(lèi)似:') 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 函數(shù):') 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數(shù)學(xué)函數(shù)示例-取整函數(shù)

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

9.numpy數(shù)學(xué)函數(shù)示例-算術(shù)函數(shù)

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

10.numpy數(shù)學(xué)函數(shù)示例-統(tǒng)計(jì)函數(shù)

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

?11.矩陣創(chuàng)建和類(lèi)型轉(zhuǎn)換

import numpy as nparray2 = np.arange(1,5) #創(chuàng)建一維數(shù)組 print("array2 = ", array2) print(array2.ndim) #輸出array2的維數(shù)為1 print(array2.shape) #輸出array2的形狀,行為4元素,列無(wú) print(type(array2)) #輸出array2的類(lèi)型,N維數(shù)組類(lèi)型mat5 = np.mat(array2) #利用mat()對(duì)一維數(shù)組創(chuàng)建矩陣mat5 print("mat5 = ", mat5) #輸出mat5 print(type(mat5)) print(mat5.ndim) #輸出mat5的維數(shù)為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("此時(shí)array1 = ", array1) #說(shuō)明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("此時(shí)數(shù)組array2 = ", array2) #說(shuō)明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("此時(shí)列表array2 = ", array2) #不影響序列print("====================================") ''' 列表、數(shù)組、矩陣間的相互轉(zhuǎn)換 ''' list1 = [[0,1,2,3],[4,5,6,7]] array1 = np.array(list1) #列表轉(zhuǎn)為數(shù)組 print("array1 type = ", type(array1)) print("array1 = ", array1) mat1 = np.mat(array1) #數(shù)組轉(zhuǎn)為矩陣 print("mat1 type = ", type(mat1)) print("mat1 = ", mat1) array2 = np.array(mat1) #矩陣轉(zhuǎn)為數(shù)組 print("array2 type = ", type(array2)) print("array2 = ", array2) array3 = mat1.getA() #矩陣轉(zhuǎn)為數(shù)組 print("array3 type = ", type(array3)) print("array3 = ", array3) list2 = mat1.tolist() #矩陣轉(zhuǎn)為列表 print("list2 from mattolist type = ", type(list2)) print("list2 = ", list2) list3 = array3.tolist() #數(shù)組轉(zhuǎn)為列表 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.矩陣運(yùn)算

import numpy as np ''' 矩陣的加減乘運(yùn)算 ''' 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的列數(shù)等于矩陣c的行數(shù) print("np.dot(a,c) = ", np.dot(a,c)) print("2 * a = ", 2 * a) #數(shù)乘矩陣 print("a * 2 = ", a * 2)''' 矩陣的轉(zhuǎn)置和求逆 ''' print("a.T = ", a.T) #矩陣轉(zhuǎn)置 print("a.I = ", a.I) #求逆矩陣''' 矩陣的求和及索引 ''' print("矩陣每一列的和 = ", a.sum(axis = 0)) #計(jì)算矩陣每一列的和print("矩陣每一行的和 = ", a.sum(axis = 1)) #計(jì)算矩陣每一行的和print("矩陣每一列的最大值 = ", a.max(axis = 0)) #計(jì)算矩陣每一列的最大值print("矩陣每一行的最大值 = ", a.max(axis = 1)) #計(jì)算矩陣每一行的最大值print("矩陣每一列的最大值索引 = ", a.argmax(axis = 0)) #計(jì)算矩陣每一列的最大值索引print("矩陣矩陣每一行的最大值索引 = ", a.argmax(axis = 1)) #計(jì)算矩陣每一行的最大值索引''' 矩陣的分割和合并 ''' 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)#分割出開(kāi)始到行2(不含);所有列,所有元素 mat3 = mat1[:2,:] print("矩陣mat1 開(kāi)始到行2(不含);所有列,所有元素, mat3= \n", mat3)#分割出行2(含)到最后行;所有列,所有元素 mat4 = mat1[2:,:] print("矩陣mat1 行2(含)到最后行;所有列,所有元素 = \n", mat4)#分割出行2(含)到最后行;所有列,所有元素 mat4 = mat1[2:] print("矩陣mat1 行2(含)到最后行;所有列,所有元素, mat4 = \n", mat4)''' #沿著第一個(gè)軸(軸0)堆疊數(shù)組。 #即列數(shù)不變,拼起每一行如果是一維數(shù)組進(jìn)行堆疊,則數(shù)組長(zhǎng)度必須相同; 除此之外,其它數(shù)組堆疊時(shí),除數(shù)組第一個(gè)軸的長(zhǎng)度可以不同, 其它軸長(zhǎng)度必須一樣。 ''' mat5 = np.vstack((mat3,mat4)) print("mat3,mat4按軸0堆疊合并 = ", mat5)''' #沿著第二個(gè)軸(軸1)堆疊數(shù)組。 #即行數(shù)不變,拼起每一列除了一維數(shù)組的堆疊可以是不同長(zhǎng)度外, 其它數(shù)組堆疊時(shí),除了第二個(gè)軸的長(zhǎng)度可以不同外,其它軸的長(zhǎng)度必須相同。 ''' mat6 = np.hstack((mat3,mat4)) print("mat3,mat4按軸1堆疊合并 = ", mat6)

13.矩陣庫(kù)matlib使用

import numpy.matlib import numpy as np''' matlib.empty() 函數(shù)返回一個(gè)新的矩陣,語(yǔ)法格式為:numpy.matlib.empty(shape, dtype, order) 參數(shù)說(shuō)明:shape: 定義新矩陣形狀的整數(shù)或整數(shù)元組 Dtype: 可選,數(shù)據(jù)類(lèi)型 order: C(行序優(yōu)先) 或者 F(列序優(yōu)先) ''' print("============== numpy.matlib.empty ============") print (np.matlib.empty((2,2))) # 填充為隨機(jī)數(shù)據(jù)''' numpy.matlib.zeros() 函數(shù)創(chuàng)建一個(gè)以 0 填充的矩陣。 ''' print("============== numpy.matlib.zeros ============") print (np.matlib.zeros((2,2)))''' numpy.matlib.ones()函數(shù)創(chuàng)建一個(gè)以 1 填充的矩陣。 ''' print("============== numpy.matlib.ones ============") print (np.matlib.ones((2,2)))''' numpy.matlib.eye(n, M,k, dtype) 返回一個(gè)矩陣,對(duì)角線元素為 1,其他位置為零。參數(shù)說(shuō)明:n: 矩陣的行數(shù) M: 矩陣的列數(shù),默認(rèn)為 n k: 對(duì)角線的索引 dtype: 數(shù)據(jù)類(lèi)型 ''' print("============== numpy.matlib.eye ============") print (np.matlib.eye(n = 3, M = 4, k = 0, dtype = float))''' numpy.matlib.identity() 函數(shù)返回給定大小的單位矩陣。 ''' print("============== numpy.matlib.identity ============") # 大小為 5,類(lèi)型位浮點(diǎn)型 print (np.matlib.identity(5, dtype = float))''' numpy.matlib.rand() 函數(shù)創(chuàng)建一個(gè)給定大小的矩陣 數(shù)據(jù)是服從[0,1)區(qū)間的均勻分布的隨機(jī)數(shù)。。 ''' print("============== numpy.matlib.rand ============") print (np.matlib.rand(3,3))''' numpy.matlib.rand() 函數(shù)創(chuàng)建一個(gè)給定大小的矩陣, 數(shù)據(jù)是服從標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)。 ''' print("============== numpy.matlib.randn ============") print (np.matlib.randn(3,3))''' numpy.matlib.repmat 函數(shù)功能概述: repmat~repeat matrix,由傳入的矩陣復(fù)制產(chǎn)生新矩陣參數(shù)解析:a是復(fù)制源頭,m是行的倍數(shù),n是列的倍數(shù)demo解析:傳入的a2本身是 23矩陣, repmat(a2,7, 3)把a(bǔ)2 的行數(shù)乘以7,列數(shù)乘以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.簡(jiǎn)介

2.安裝

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

1.創(chuàng)建數(shù)組

2.數(shù)組的訪問(wèn)——索引+切片

3.數(shù)組的訪問(wèn)——高級(jí)索引(布爾索引)

4.數(shù)組形狀變換

5.數(shù)組基本運(yùn)算

6.數(shù)組運(yùn)算時(shí)的廣播機(jī)制

7.numpy數(shù)學(xué)函數(shù)示例-三角函數(shù)

8.numpy數(shù)學(xué)函數(shù)示例-取整函數(shù)

9.numpy數(shù)學(xué)函數(shù)示例-算術(shù)函數(shù)

10.numpy數(shù)學(xué)函數(shù)示例-統(tǒng)計(jì)函數(shù)

?11.矩陣創(chuàng)建和類(lèi)型轉(zhuǎn)換

12.矩陣運(yùn)算

13.矩陣庫(kù)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)) #一個(gè)不可逆矩陣 ##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) #與筆算結(jié)果比較一下 #以下兩個(gè)例子為特征值兩兩不等的情況 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("===================") #以下的例子有相同的特征值 #這個(gè)例子可以找到3個(gè)線性無(wú)關(guān)的特征向量 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("===================") #下面的例子無(wú)法找到3個(gè)線性無(wú)關(guān)的特征向量 A = np.array([[6, -2, 1],[0, 4, 0],[0,0,6]])evalue, evector = linalg.eig(A) print("特征值:", evalue) print("特征向量:", evector)#中英文均有的數(shù)據(jù),可以考慮用genfromtxt ''' delimiter: the str used to separate data. 如本例中橫縱坐標(biāo)以 ',' 分割,因此給 delimiter 傳入 ','。 skip_header: the number of lines to skip at the beginning of the file. dtype:數(shù)據(jù)類(lèi)型 ''' data2=np.genfromtxt('test2.txt',skip_header=0,dtype='U',delimiter=',') print(data2) ''' #中英文均有的數(shù)據(jù),用loadtxt處理時(shí)會(huì)有一些問(wèn)題,比如下面的就會(huì)報(bào)錯(cuò) info = np.loadtxt('test2.txt', dtype=bytes, delimiter=',', unpack=False) print(info) '''

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。