新聞中心
小編給大家分享一下學(xué)習(xí)numpy會(huì)遇到的問(wèn)題,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!
前進(jìn)網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
1、什么是numpy?
一言以蔽之,numpy是python中基于數(shù)組對(duì)象的科學(xué)計(jì)算庫(kù)。
提煉關(guān)鍵字,可以得出numpy以下三大特點(diǎn):
- 擁有n維數(shù)組對(duì)象;
- 擁有廣播功能(后面講到);
- 擁有各種科學(xué)計(jì)算API,任你調(diào)用;
2、如何安裝numpy?
因?yàn)閚umpy是一個(gè)python庫(kù),所以使用python包管理工具pip或者conda都可以安裝。
安裝python后,打開(kāi)cmd命令行,輸入:
pip install numpy
即可完成安裝。
3、什么是n維數(shù)組對(duì)象?
n維數(shù)組(ndarray)對(duì)象,是一系列同類(lèi)數(shù)據(jù)的集合,可以進(jìn)行索引、切片、迭代操作。
numpy中可以使用array
函數(shù)創(chuàng)建數(shù)組:
import numpy as npnp.array([1,2,3])# 輸出:array([1, 2, 3])
4、如何區(qū)分一維、二維、多維?
判斷一個(gè)數(shù)組是幾維,主要是看它有幾個(gè)軸(axis)。
一個(gè)軸表示一維數(shù)組,兩個(gè)軸表示二維數(shù)組,以此類(lèi)推。
每個(gè)軸都代表一個(gè)一維數(shù)組。
比如說(shuō),二維數(shù)組第一個(gè)軸里的每個(gè)元素都是一個(gè)一維數(shù)組,也就是第二個(gè)軸。
一維數(shù)組一個(gè)軸:
[1,2,3]
二維數(shù)組兩個(gè)軸:
[[0, 1, 2], [3, 4, 5]]
三維數(shù)組三個(gè)軸:
[[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]]
以此類(lèi)推n維數(shù)組。
5、如何創(chuàng)建n維數(shù)組?
numpy中常用array
函數(shù)創(chuàng)建數(shù)組,傳入列表或元組即可。
創(chuàng)建一維數(shù)組,并指定數(shù)組類(lèi)型為int
:
import numpy as npnp.array([1,2,3],dtype=int)# 輸出:array([1, 2, 3])
創(chuàng)建二維數(shù)組:
import numpy as npnp.array(((1,2),(3,4))) '''輸出:array([[1, 2], [3, 4]])'''
還可以使用arange
函數(shù)創(chuàng)建一維數(shù)字?jǐn)?shù)組,用法類(lèi)似python的range
函數(shù).
import numpy as npnp.arange(1,6)'''輸出:array([1, 2, 3, 4, 5])'''
6、如何創(chuàng)建隨機(jī)數(shù)組?
numpy的random
模塊用來(lái)創(chuàng)建隨機(jī)數(shù)組。
random.rand
函數(shù),生成[0,1)均勻分布的隨機(jī)數(shù)組
import numpy as np# 創(chuàng)建2行2列取值范圍為[0,1)的數(shù)組np.random.rand(2,2)'''輸出:array([[0.99449146, 0.92339551], [0.1837405 , 0.41719798]])'''
random.randn
函數(shù),生成數(shù)值成標(biāo)準(zhǔn)正態(tài)分布(平均值為0,標(biāo)準(zhǔn)差為1)的數(shù)組
import numpy as np# 創(chuàng)建2行3列,取值范圍為標(biāo)準(zhǔn)正態(tài)分布的數(shù)組np.random.randn(3,2)'''輸出:array([[-1.27481003, -1.5888111 ], [ 0.16985203, -2.91526479], [ 1.75992671, -2.81304831]])'''
random.randint
函數(shù),生成可以指定范圍的隨機(jī)整數(shù)數(shù)組
import numpy as np# 創(chuàng)建2行2列,取值范圍為[2,10)的隨機(jī)整數(shù)數(shù)組np.random.randint(2,10,size=(2,2))'''輸出:array([[5, 4], [3, 7]])'''
random.normal
函數(shù),生成數(shù)值成正態(tài)分布(可指定平均值、標(biāo)準(zhǔn)差)的數(shù)組
import numpy as np# 創(chuàng)建一維,數(shù)值成正態(tài)分布(均值為1,標(biāo)準(zhǔn)差為2)的數(shù)組# 參數(shù)loc代表均值,scale代表標(biāo)準(zhǔn)差np.random.normal(loc=1,scale=2,size=5)'''輸出:array([ 0.82962241, 0.41738042, 0.0470862 , 1.79446076, -1.47514478])'''
random模塊還有其他函數(shù),這里不多說(shuō)。
7、如何查看數(shù)組的維度?
前面說(shuō)到,數(shù)組維度即代表軸的數(shù)量。
我們可以通過(guò)數(shù)組(adarray)對(duì)象的ndim或shape屬性,來(lái)查看軸的數(shù)量。
- ndim屬性直接返回維度值;
- shape屬性返回一個(gè)元組,元組的長(zhǎng)度即代表維度值,里面的數(shù)字從左往右分別代表每一軸的元素?cái)?shù)量。
import numpy as np# 創(chuàng)建一維數(shù)組x1 = np.array([1,2,3])# 返回維度值x1.ndim'''輸出:1'''# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]])# 返回形狀x2.shape'''輸出:(2, 3)元素長(zhǎng)度為2代表二維,元素2代表0軸有兩個(gè)元素,元素3代表1軸有3個(gè)元素。'''
8、如何查看數(shù)組有多少個(gè)元素?
數(shù)組(ndarray)對(duì)象的size
屬性可以查看數(shù)組包含元素總數(shù)。
import numpy as np# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]])# 查看元素總數(shù)x2.size'''輸出:6'''
還可以通過(guò)shape
屬性返回元素的乘積,來(lái)計(jì)算數(shù)組元素?cái)?shù)量。
import numpy as npfrom functools import reduce# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]])# 查看元素總數(shù)reduce(lambda x,y:x*y , x2.shape)'''輸出:6shape形狀:(2,3)'''
9、Numpy數(shù)組支持哪些數(shù)據(jù)類(lèi)型?
Numpy支持的數(shù)據(jù)類(lèi)型非常多,所以很適合做數(shù)值計(jì)算。 下面給出常見(jiàn)的數(shù)據(jù)類(lèi)型:
10、如何查看數(shù)組的類(lèi)型?
數(shù)組(adarrry)對(duì)象提供dtype
屬性,用來(lái)查看數(shù)組類(lèi)型。
import numpy as np# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]],dtype=int)# 返回類(lèi)型x2.dtype'''輸出:dtype('int32')'''
11、如何改變數(shù)組的形狀?
前面說(shuō)過(guò),數(shù)組的shape
屬性返回一個(gè)元組,能夠反映數(shù)組的形狀,包括維度以及每個(gè)軸的元素?cái)?shù)量。
那么如果給定一個(gè)數(shù)組,怎么改變其形狀呢?
常用的方式有兩種:
reshape
方法,它返回一個(gè)新的數(shù)組,而不能改變?cè)紨?shù)組。resize
方法,無(wú)返回值,它更改了原始數(shù)組。
比如說(shuō)我要將一個(gè)二維數(shù)組轉(zhuǎn)換為三維數(shù)組。
import numpy as np# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]])# 將x2轉(zhuǎn)換為三維數(shù)組,并且自定義每個(gè)軸的元素?cái)?shù)量x2.reshape(1,2,3)'''輸出:array([[[1, 2, 3], [4, 5, 6]]])'''
reshape
方法可以傳入整數(shù)或者元組形式的參數(shù)。
傳入的參數(shù)和shape
屬性返回的元組的含義是一樣的。
例如, x2.reshape(1,2,3)
是將二維數(shù)組轉(zhuǎn)換成三維數(shù)組,參數(shù)個(gè)數(shù)代表要轉(zhuǎn)換的維度,參數(shù)數(shù)字從左到右分別表示0軸、1軸、2軸的元素?cái)?shù)量。
resize
方法和reshape
方法使用形式一樣,區(qū)別是resize
方法改變了原始數(shù)組形狀。
import numpy as np# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]])# 將x2轉(zhuǎn)換為三維數(shù)組,并且自定義每個(gè)軸的元素?cái)?shù)量x2.resize((1,2,3))x2'''輸出:array([[[1, 2, 3], [4, 5, 6]]])'''
12、如何對(duì)數(shù)組進(jìn)行索引和切片操作?
numpy一維數(shù)組的索引和切片操作類(lèi)似python列表,這里不多講。
比如說(shuō)取一維數(shù)組前三個(gè)元素。
import numpy as np# 創(chuàng)建一維數(shù)組x1 = np.array([1,2,3,4])# 切片,取前三個(gè)元素x1[:3]'''輸出:array([1, 2, 3])'''
重點(diǎn)是對(duì)多維數(shù)組的索引和切片。
多維數(shù)組有多個(gè)軸,那么就需要對(duì)每個(gè)軸進(jìn)行索引。
例如,三維數(shù)組形狀為(x,y,z),分別代表:0軸有x個(gè)元素、1軸有y個(gè)元素,2軸有z個(gè)元素。
對(duì)0、1、2軸進(jìn)行索引,如果取o軸第2個(gè)元素、1軸第0個(gè)元素、2軸第3個(gè)元素,那么索引形式就為[2,0,3]。
import numpy as np# 創(chuàng)建三維數(shù)組x3 = np.arange(24).reshape(3,2,4)# 對(duì)該三維數(shù)組進(jìn)行索引x3[2,0,3]'''輸出:19三維數(shù)組形式:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23]]])'''
切片也是同樣道理。
如果取o軸前2個(gè)元素、1軸前1個(gè)元素、2軸后2個(gè)元素,那么切片形式就為[:2,:1,-2:]。
import numpy as np# 創(chuàng)建三維數(shù)組x3 = np.arange(24).reshape(3,2,4)# 對(duì)該三維數(shù)組進(jìn)行切片x3[:2,:1,-2:]'''輸出:array([[[ 2, 3]], [[10, 11]]])三維數(shù)組形式:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23]]])'''
13、如何對(duì)數(shù)組里每個(gè)元素進(jìn)行迭代?
說(shuō)到迭代,大家很容易想到直接對(duì)數(shù)組直接使用for
循環(huán)操作,對(duì)于一維數(shù)組來(lái)說(shuō),當(dāng)然是可以的。
import numpy as np# 創(chuàng)建一維數(shù)組x1 = np.array([1,2,3,4])# 迭代for i in x1: print(i)'''輸出:1234'''
但對(duì)于多維數(shù)組,迭代是相對(duì)于0軸完成的,就是多維數(shù)組最外層的那一維。
你沒(méi)有辦法直接遍歷數(shù)組里每一個(gè)元素,嵌套循環(huán)又太低效。
這個(gè)時(shí)候就需要用到flat
方法,它可以將多維數(shù)組平鋪為一維的迭代器。
import numpy as np# 創(chuàng)建二維數(shù)組x2 = np.array([[1,2,3],[4,5,6]])# 先平鋪,再迭代for i in x2.flat: print(i)'''輸出:123456'''
14、如何將多維數(shù)組展開(kāi)為一維數(shù)組?
數(shù)組(ndarray)對(duì)象提供了ravel方法,用來(lái)將多維數(shù)組展開(kāi)為一維數(shù)組。
import numpy as np# 創(chuàng)建er維數(shù)組x3 = np.arange(12).reshape(3,4)# 對(duì)該三維數(shù)組進(jìn)行索引x3.ravel()'''輸出:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])'''
15、什么廣播機(jī)制?
廣播(Broadcast)是 numpy 對(duì)不同形狀(shape)的數(shù)組進(jìn)行數(shù)值計(jì)算的方式, 對(duì)多個(gè)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。
較小的數(shù)組在較大的數(shù)組上“廣播”,以便它們具有兼容的形狀。
比如說(shuō)一個(gè)一維數(shù)組乘以一個(gè)數(shù)字,相當(dāng)于一維數(shù)組里每個(gè)元素都乘以這個(gè)數(shù)。
import numpy as np# 創(chuàng)建一維數(shù)組x1 = np.array([1,2,3])# 廣播x1 * 2'''輸出:array([2, 4, 6])'''
如果相同維度的數(shù)組進(jìn)行運(yùn)算,其shape相同,那么廣播就是兩個(gè)數(shù)組相同位數(shù)的元素進(jìn)行運(yùn)算。
import numpy as np# 創(chuàng)建一維數(shù)組x1 = np.array([1,2,3])x2 = np.array([4,5,6])# 廣播x1 + x2'''輸出:array([5, 7, 9])'''
如果兩個(gè)數(shù)組維度不同,進(jìn)行運(yùn)算,這里就觸發(fā)了廣播的兩個(gè)規(guī)則。
- 讓所有輸入數(shù)組都向其中形狀最長(zhǎng)的數(shù)組看齊,形狀中不足的部分都通過(guò)在前面加 1 補(bǔ)齊;
- 當(dāng)輸入數(shù)組的某個(gè)維度的長(zhǎng)度為 1 時(shí),沿著此維度運(yùn)算時(shí)都用此維度上的第一組值。
這兩個(gè)規(guī)則保證了不同維度數(shù)組進(jìn)行運(yùn)算時(shí),其維度自動(dòng)調(diào)整成一致。
import numpy as np
# 創(chuàng)建一維數(shù)組
x1 = np.array([[1,2,3],[4,5,6]])
x2 = np.array([2,3,4])
# 廣播
x1 - x2
'''
輸出:
array([[-1, -1, -1],
[ 2, 2, 2]])
'''
16、numpy中如何進(jìn)行數(shù)值舍入操作?
around
函數(shù),用于四舍五入,返回一個(gè)新數(shù)組
import numpy as np
# 創(chuàng)建一維數(shù)組
x1 = np.array([1.45,2.78,3.12])
# 四舍五入,到小數(shù)點(diǎn)后1位
np.around(x1,1)
'''
輸出:
array([1.4, 2.8, 3.1])
'''
floor
函數(shù),用于向下取整,返回一個(gè)新數(shù)組
import numpy as np
# 創(chuàng)建一維數(shù)組
x1 = np.array([1.45,2.78,3.12])
# 向下取整
np.floor(x1)
'''
輸出:
array([1., 2., 3.])
'''
ceil
函數(shù),用于向上取整,返回一個(gè)新數(shù)組
import numpy as np
# 創(chuàng)建一維數(shù)組
x1 = np.array([1.45,2.78,3.12])
# 向下取整
np.ceil(x1)
'''
輸出:
array([2., 3., 4.])
'''
17、如何對(duì)數(shù)組進(jìn)行轉(zhuǎn)置操作?
numpy提供了transpose
函數(shù)用以對(duì)數(shù)組進(jìn)行維度的調(diào)換,也就是轉(zhuǎn)置操作。
轉(zhuǎn)置后返回一個(gè)新數(shù)組。
import numpy as np
# 創(chuàng)建二維數(shù)組
x1 = np.arange(12).reshape(3,4)
# 轉(zhuǎn)置
np.transpose(x1)
'''
輸出:
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
原數(shù)組:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
'''
當(dāng)然,可以用更簡(jiǎn)單的方法。
數(shù)組對(duì)象提供了T
方法,用于轉(zhuǎn)置,同樣會(huì)返回一個(gè)新數(shù)組。
import numpy as np
# 創(chuàng)建二維數(shù)組
x1 = np.arange(12).reshape(3,4)
# 轉(zhuǎn)置
x1.T
'''
輸出:
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
原數(shù)組:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
'''
18、如何連接兩個(gè)相同維度的數(shù)組?
numpy的concatenate
函數(shù)用于沿指定軸連接相同形狀的兩個(gè)或多個(gè)數(shù)組。
import numpy as np
# 創(chuàng)建兩個(gè)二維數(shù)組
x1 = np.array([[1,2,3],[4,5,6]])
x2 = np.array([[7,8,9],[10,11,12]])
# 連接,默認(rèn)沿0軸連接
np.concatenate((x1,x2))
'''
輸出:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
'''
# 指定沿1軸連接
np.concatenate((x1,x2),axis=1)
'''
輸出:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])
'''
19、如何向數(shù)組添加值?
- numpy的
append
函數(shù)向數(shù)組末尾追加值,可以指定不同的軸。
import numpy as np
# 創(chuàng)建一個(gè)二維數(shù)組
x1 = np.array([[1,2,3],[4,5,6]])
# 直接向數(shù)組末尾添加元素,返回平鋪的一維數(shù)組
np.append(x1,[7,8,9])
'''
輸出:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
'''
# 沿軸 0 添加元素
np.append(x1, [[7,8,9]],axis = 0)
'''
輸出:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
'''
# 沿軸 1 添加元素
np.append(x1, [[5,5,5],[7,8,9]],axis = 1)
'''
輸出:
array([[1, 2, 3, 5, 5, 5],
[4, 5, 6, 7, 8, 9]])
'''
- numpy的
insert
函數(shù)可以沿給定軸,在數(shù)組中任意位置插入數(shù)據(jù)。
import numpy as np
# 創(chuàng)建一個(gè)二維數(shù)組
x1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 直接在指定位置插入元素,返回平鋪的一維數(shù)組
np.insert(x1,2,[0,0,0])
'''
輸出:
array([1, 2, 0, 0, 0, 3, 4, 5, 6, 7, 8, 9])
原數(shù)組:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
'''
# 指定位置,沿軸 0 插入元素
np.insert(x1,1,[0,0,0],axis=0)
'''
輸出:
array([[1, 2, 3],
[0, 0, 0],
[4, 5, 6],
[7, 8, 9]])
'''
# 指定位置,沿軸 1插入元素
np.insert(x1,2,[0,0,0],axis=1)
'''
輸出:
array([[1, 2, 0, 3],
[4, 5, 0, 6],
[7, 8, 0, 9]])
'''
20、如何對(duì)數(shù)組進(jìn)行去重操作?
numpy的unique
函數(shù)用于去除數(shù)組中的重復(fù)元素,返回一個(gè)新數(shù)組。
import numpy as np
# 創(chuàng)建一個(gè)一維數(shù)組
x1 = np.array([2,3,5,1,3,8,1,0])
np.unique(x1)
'''
輸出:
array([0, 1, 2, 3, 5, 8])
'''
unique
函數(shù)還能返回重復(fù)元素的索引、計(jì)數(shù)等信息,可去查文檔自定義參數(shù)。
看完了這篇文章,相信你對(duì)學(xué)習(xí)numpy會(huì)遇到的問(wèn)題有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁(yè)名稱(chēng):學(xué)習(xí)numpy會(huì)遇到的問(wèn)題
文章位置:http://www.dlmjj.cn/article/gciiho.html