numpy 平方_Numpy的终极备忘录
作者|Rashida Nasrin Sucky 編譯|VK 來源|Towards Data Science
Python是開源的。對(duì)于使用python的數(shù)據(jù)科學(xué)家來說,Numpy這個(gè)庫是必不可少的。其他一些基本的庫,如Pandas,Scipy是建立在Numpy的基礎(chǔ)上。所以我決定做一份備忘錄。這里我包括了到目前為止使用的所有Numpy函數(shù)。我相信這些函數(shù)將足以讓你在日常工作中作為數(shù)據(jù)科學(xué)家或數(shù)據(jù)分析員完成你的工作。
我將從非常基本的Numpy功能開始,慢慢地向更高級(jí)的功能移動(dòng)。但是使用Numpy很容易。在這里你不會(huì)發(fā)現(xiàn)任何復(fù)雜的編碼技巧。
什么是Numpy
在Numpy文檔中,Numpy的定義如下:
NumPy是Python中科學(xué)計(jì)算的基本包。它是一個(gè)Python庫,它提供多維數(shù)組對(duì)象、各種派生對(duì)象(如掩碼數(shù)組和矩陣)以及數(shù)組上快速操作的各種例程,包括數(shù)學(xué)、邏輯、形狀處理、排序、選擇、I/O、離散傅立葉變換、基本線性代數(shù),基本的統(tǒng)計(jì)操作,隨機(jī)模擬等等。
我每天都用這個(gè)庫。如果是python用戶,大多數(shù)數(shù)據(jù)科學(xué)家都會(huì)這么做。它快速,易于使用,理解,簡(jiǎn)單。我不想寫太多關(guān)于它是如何和為什么這么好的。因?yàn)樵陂喿x本文的過程中,你將親眼看到這一點(diǎn)。
我的目標(biāo)是記錄Numpy每天使用的方法。
正如文章名所說,這是一本關(guān)于Numpy的指南。它也可以用作備忘錄。如果你使用Numpy庫或計(jì)劃將來使用,或正在學(xué)習(xí),此頁面可以成為你日常生活的一個(gè)很好的資源。
這里將討論以下主題:
Numpy數(shù)組基礎(chǔ)知識(shí)
重復(fù)
數(shù)學(xué)運(yùn)算
統(tǒng)計(jì)
初始化不同類型的數(shù)組
重新排列或重新組織數(shù)組
數(shù)組的索引與切片
添加行或列
追加、插入、刪除和排序
隨機(jī)
文件導(dǎo)入、保存和加載
我們開始吧!!
Numpy數(shù)組基礎(chǔ)知識(shí)
整個(gè)練習(xí)我都用了一個(gè)Jupyter Notebook。第一個(gè)導(dǎo)入Numpy。
import numpy as np做一個(gè)Numpy數(shù)組。為此,我們需要傳遞一個(gè)Python列表。
輸入:
a = np.array([1,2,3]) a輸出:
array([1, 2, 3])在數(shù)組'a'中,我使用了所有的整數(shù)。現(xiàn)在,制作一個(gè)浮點(diǎn)數(shù)組:
輸入:
b = np.array([[9.0, 10.0, 6.0], [6.0,1.0,7.0]]) b輸出:
array([[ 9., 10., 6.],[ 6., 1., 7.]])讓我們?cè)囍酶↑c(diǎn)型和浮點(diǎn)型數(shù)組:
輸入:
np.array([1, 3.0, 0.004, -2])輸出:
array([ 1. , 3. , 0.004, -2. ])注意,Numpy自動(dòng)將整數(shù)轉(zhuǎn)換為浮點(diǎn)!
找出數(shù)組a和b的尺寸:
輸入:
a.ndim輸出:
1輸入:
b.ndim輸出:
2數(shù)組“a”是一維數(shù)組,數(shù)組b是二維數(shù)組。
現(xiàn)在,找出數(shù)組“a”和“b”的形狀:
輸入:
a.shape輸出:
(3,)輸入:
b.shape輸出:
(2, 3)數(shù)組“a”是一維數(shù)組。它只有一個(gè)值。但是數(shù)組b是一個(gè)二維數(shù)組。所以,它的形狀是2×3。這意味著它有2行3列。
查找數(shù)組的長(zhǎng)度:
輸入:
len(a)輸出:
3輸入:
len(b)輸出:
2數(shù)組a的長(zhǎng)度是3,因?yàn)樗锩嬗?個(gè)元素。數(shù)組“b”是一個(gè)二維數(shù)組。因此,數(shù)組的長(zhǎng)度并不意味著其中元素的數(shù)量。長(zhǎng)度表示其中一維數(shù)組的數(shù)量或其中的行數(shù)。它有兩行。長(zhǎng)度是2。
重復(fù)
有幾種不同的方法可以重復(fù)數(shù)組的元素。如果你想重復(fù)整個(gè)數(shù)組,
輸入:
np.array([2,4,6]*4)輸出:
array([2, 4, 6, 2, 4, 6, 2, 4, 6, 2, 4, 6])看,數(shù)組[2,4,6]被重復(fù)了4次。
下面是如何做元素級(jí)的重復(fù),
輸入:
np.repeat([1,2,3], 3)輸出:
array([1, 1, 1, 2, 2, 2, 3, 3, 3])這次每個(gè)元素重復(fù)3次。
我們把這個(gè)用于二維數(shù)組,
輸入:
arr = np.array([[2, 4, 6]]) arr輸出:
array([[2, 4, 6]])現(xiàn)在,在它上面重復(fù):
輸入:
np.repeat(arr,3,axis=0)輸出:
array([[2, 4, 6],[2, 4, 6],[2, 4, 6]])這里,我們提到axis=0。所以,重復(fù)發(fā)生在0軸方向或行方向。
輸入:
np.repeat(arr,3,axis=1)輸出:
array([[2, 2, 2, 4, 4, 4, 6, 6, 6]])軸1指示列的方向。所以,重復(fù)發(fā)生在列的方向上。
數(shù)學(xué)運(yùn)算
在這一節(jié)中,我將展示數(shù)學(xué)運(yùn)算。大多數(shù)操作都是不言而喻的。我將從一個(gè)數(shù)組的數(shù)學(xué)運(yùn)算開始。
輸入:
a = np.array([1,2,3,4]) a輸出:
array([1, 2, 3, 4])輸入:
a+2輸出:
array([3, 4, 5, 6])它向數(shù)組的每個(gè)元素添加2。
輸入:
a-2輸出:
array([-1, 0, 1, 2])你可以簡(jiǎn)單地使用類似的操作,例如:
輸入:
a/2輸出:
array([0.5, 1. , 1.5, 2. ])輸入:
a**2輸出:
array([ 1, 4, 9, 16], dtype=int32)兩個(gè)星號(hào)表示指數(shù)。“a”中的每個(gè)元素都是平方的。
輸入:
np.sqrt(a) # 平方根輸出:
array([1. , 1.41421356, 1.73205081, 2. ])我們還可以執(zhí)行一些三角運(yùn)算:
輸入:
np.cos(a)輸出:
array([ 0.54030231, -0.41614684, -0.9899925 , -0.65364362])輸入:
np.sin(a)輸出:
array([ 0.84147098, 0.90929743, 0.14112001, -0.7568025 ])輸入:
np.tan(a)輸出:
array([ 1.55740772, -2.18503986, -0.14254654, 1.15782128])現(xiàn)在看看我們?nèi)绾卧趦蓚€(gè)數(shù)組或矩陣中做一些數(shù)學(xué)運(yùn)算。首先,再做一個(gè)數(shù)組,
輸入:
b = np.array([3,4,5,6])輸出:
array([3, 4, 5, 6])作為提醒,我們的數(shù)組“a”如下所示:
array([1, 2, 3, 4])現(xiàn)在,我們有兩個(gè)數(shù)組,a和b。讓我們做同樣的數(shù)學(xué)運(yùn)算。再說一次,這很簡(jiǎn)單,不言自明,
輸入:
a + b輸出:
array([ 4, 6, 8, 10])你可以用同樣的方法進(jìn)行以下操作:
a - b a*b a/b a**b另一種廣泛使用的操作是,
輸入:
a.dot(b)輸出:
50什么是a.dot(b)?這是先應(yīng)用元素的乘法,然后再進(jìn)行累加,
1*3 + 2*4 + 3*5 + 4*6其中數(shù)組“a”是[1,2,3,4],數(shù)組b是[3,4,5,6]。
你也可以寫一些不同的語法,
np.dot(a, b)這是一樣的。輸出將是50。
我們可以在多維數(shù)組中使用這個(gè)過程。我們做兩個(gè)多維數(shù)組,
輸入:
c = np.array([[3, 5, 1], [6, 4, 9]]) c輸出:
array([[3, 5, 1],[6, 4, 9]])輸入:
d = np.array([[5,2], [7,9], [4, 3]]) d輸出:
array([[5, 2],[7, 9],[4, 3]])我們準(zhǔn)備好在多維數(shù)組上進(jìn)行“點(diǎn)”運(yùn)算,
輸入:
c.dot(d)輸出:
array([[54, 54],[94, 75]])當(dāng)輸入為二維數(shù)組時(shí),“點(diǎn)”函數(shù)的行為類似于矩陣乘法。
這意味著你只能在第一個(gè)數(shù)組的列數(shù)與第二個(gè)數(shù)組中的行數(shù)匹配時(shí)執(zhí)行“點(diǎn)”操作。
如果第一個(gè)數(shù)組是mxn,那么第二個(gè)數(shù)組應(yīng)該是nxp。
矩陣乘法還有另一個(gè)表達(dá)式,
輸入:
np.matmul(c, d)輸出:
array([[54, 54],[94, 75]])‘np.matmul'在一維數(shù)組中不起作用
記住,這個(gè)乘法規(guī)則不適用于其他運(yùn)算,如加法、減法或除法。我們需要有相同形狀和大小的數(shù)組來對(duì)一個(gè)矩陣進(jìn)行加法、減法或除法。
統(tǒng)計(jì)
Numpy也有基本的統(tǒng)計(jì)操作。這里有一些例子。
首先創(chuàng)建一個(gè)新數(shù)組。
輸入:
x = np.array([1,3,4,6,-3,-2]) x.sum()輸出:
9輸入:
x.max()輸出:
6輸入:
x.min()輸出:
-3輸入:
x.mean()輸出:
1.5輸入:
x.std() # 標(biāo)準(zhǔn)差輸出:
3.2015621187164243還有另外兩個(gè)非常有用的函數(shù),它們不是完全統(tǒng)計(jì)的,
輸入:
x.argmin()輸出:
4輸入:
x.argmax()輸出:
3什么是“argmin()”或“argmax()”?
“argmin()”提供數(shù)組最小元素的索引,“argmax()”返回?cái)?shù)組最大值的索引。
數(shù)組“x”的最小元素是-3,數(shù)組“x”的最大元素是6。可以檢查他們的索引是否匹配。
初始化不同類型的數(shù)組
Numpy中有很多不同的方法來初始化數(shù)組。這里我將討論一些常用的方法:
輸入:
np.arange(10)輸出:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])這是初始化一系列數(shù)字的方法。注意它從0開始到9結(jié)束。始終排除上限。這里的上限是10。所以,它在9停止。
我們還可以添加一個(gè)數(shù)學(xué)運(yùn)算:
輸入:
np.arange(10)**2輸出:
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)在本例中,我們要求平方,我們得到了輸出數(shù)組中0到9的平方。
我們可以用一定的間隔把一系列的數(shù)字組成一個(gè)數(shù)組。
np.arange(0, 15, 3)輸出:
array([ 0, 3, 6, 9, 12])這里,0是下限,15是上限,3是間隔。
還有另一種方法可以提供稍微不同的序列:
輸入:
np.linspace(0, 3, 15)輸出:
array([0. , 0.21428571, 0.42857143, 0.64285714, 0.85714286,1.07142857, 1.28571429, 1.5 , 1.71428571, 1.92857143,2.14285714, 2.35714286, 2.57142857, 2.78571429, 3. ])這里的元素?cái)?shù)是0,上限是3。在本例中,Numpy自動(dòng)生成15個(gè)元素,這些元素的間距從0到3相等。
還有幾種其他類型的數(shù)組:
輸入:
np.ones((3, 4))輸出:
array([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]])輸入:
np.zeros((2, 3))輸出:
array([[0., 0., 0.],[0., 0., 0.]])你可以得到一個(gè)三維數(shù)組:
輸入:
np.ones((4,3,2), dtype='int32')輸出:
array([[[1, 1],[1, 1],[1, 1]],[[1, 1],[1, 1],[1, 1]],[[1, 1],[1, 1],[1, 1]],[[1, 1],[1, 1],[1, 1]]])這里,(4,3,2)表示4個(gè)二維數(shù)組,每個(gè)數(shù)組有3行2列。
還有另一種方法叫做full,它可以替換數(shù)組的元素:
輸入:
np.full((2,2), 30)輸出:
array([[30, 30],[30, 30]])輸入:
ar = np.array([[2,3], [4,5]]) ar輸出:
array([[2, 3],[4, 5]])輸入:
np.full_like(ar, 4)輸出:
array([[4, 4],[4, 4]])還有另一種類型的矩陣稱為單位矩陣:
輸入:
np.identity(5)輸出:
array([[1., 0., 0., 0., 0.],[0., 1., 0., 0., 0.],[0., 0., 1., 0., 0.],[0., 0., 0., 1., 0.],[0., 0., 0., 0., 1.]])這是一個(gè)5x5的矩陣,只有對(duì)角元素是1,其他元素都是0。
還有一種類型叫做“eye”。它的參數(shù)是矩陣的形狀:
輸入:
np.eye(3,3)輸出:
array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])輸入:
np.eye(3,4)輸出:
array([[1., 0., 0., 0.],[0., 1., 0., 0.],[0., 0., 1., 0.]])對(duì)角線上的數(shù)字可以不同于1。
輸入:
a = np.array([2,4,5]) np.diag(a)輸出:
array([[2, 0, 0],[0, 4, 0],[0, 0, 5]])重新排列或重新組織數(shù)組
有不同的方法來重新排列或組織數(shù)組。
首先,做一個(gè)數(shù)組,
輸入:
x = np.arange(0, 45, 3) x輸出:
array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42])我在上一節(jié)中解釋了“arange”函數(shù)。讓我們看看如何重塑它。
輸入:
x.reshape(3, 5)輸出:
array([[ 0, 3, 6, 9, 12],[15, 18, 21, 24, 27],[30, 33, 36, 39, 42]])我們傳入了(3,5)。因此,它變成了一個(gè)有3行5列的二維數(shù)組。我們可以通過使用:
x.resize(3,5)如果我們想回到原來的一維數(shù)組呢?
這是方法之一
輸入:
x.ravel()輸出:
array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42])看,我們找回了原來的數(shù)組!
注意另一件事。我們改變了數(shù)組的維數(shù)。數(shù)組“x”是一維數(shù)組。我們通過重塑它使它成為一個(gè)二維數(shù)組。
現(xiàn)在,制作另一個(gè)數(shù)組來更好地理解它。這是另一個(gè)例子。
輸入:
c = np.array([4,5,6]) c輸出:
array([4, 5, 6])這次我將使用resize。“reshape”也會(huì)這樣做。為了練習(xí)調(diào)整大小,讓我們?cè)谶@里使用resize。
輸入:
c.resize(3,1)輸出:
array([[4],[5],[6]])我們提供了(3,1)作為調(diào)整大小的參數(shù)。所以它有3行1列。這是一個(gè)3x1矩陣。我們也可以有一個(gè)1x3矩陣。
輸入:
c.resize(1,3) c輸出:
array([[4, 5, 6]])原來c是一維數(shù)組。或者現(xiàn)在是二維矩陣。
不要認(rèn)為你只能重塑一個(gè)一維數(shù)組的大小。也可以在高維數(shù)組中執(zhí)行此操作。
我舉幾個(gè)例子:
輸入:
x = np.array([[1,2,3,4], [5,6,7,8]]) x輸出:
array([[1, 2, 3, 4],[5, 6, 7, 8]])現(xiàn)在重塑這個(gè)二維數(shù)組,
輸入:
x.reshape(4,2) x輸出:
array([[1, 2],[3, 4],[5, 6],[7, 8]])你可以使用我前面提到的“resize”來實(shí)現(xiàn)這一點(diǎn)。還有另一種方法,
輸入:
y = x.reshape(4, -1) y輸出:
array([[1, 2],[3, 4],[5, 6],[7, 8]])看起來很困惑?想象一下,你有一個(gè)巨大的數(shù)組或數(shù)據(jù)集。在重塑之前,你只知道一個(gè)維度。因此,在reshape方法中,給出了其他維的大小,剩下的numpy可以自己計(jì)算。
在上面的例子中,我傳遞了第一個(gè)維度4。這意味著我要讓Numpy做4行。我不知道有多少列。所以我就設(shè)置參數(shù)-1。所以,它會(huì)自動(dòng)生成2列。
當(dāng)我們處理大數(shù)據(jù)集或數(shù)據(jù)幀時(shí),這是一個(gè)非常有用的技巧,我們必須構(gòu)建機(jī)器學(xué)習(xí)算法。
在上面的所有例子中,我們看到了如何重塑和改變尺寸。
這是改變尺寸的方法。上面的數(shù)組“y”是一個(gè)4x2矩陣。讓我們?cè)僮鲆粋€(gè)2x4矩陣。
輸入:
y.T輸出:
array([[1, 3, 5, 7],[2, 4, 6, 8]])這種方法稱為轉(zhuǎn)置。當(dāng)你在數(shù)組或矩陣上使用轉(zhuǎn)置時(shí),它只是改變了維數(shù)。2x3矩陣變?yōu)?x2,3x6矩陣變?yōu)?x3或1x3矩陣變?yōu)?x1。
索引或切片
索引和切片是一項(xiàng)非常常見的日常任務(wù)。我們來舉幾個(gè)例子:
輸入:
a = np.array([2,5,1,7,6,3,9,0,4])輸入:
a[0]輸出:
2a[0]給出數(shù)組的第一個(gè)元素。同樣,我們可以繼續(xù)使用a[1],a[2],一直到整個(gè)數(shù)組。
輸入:
a[3]輸出:
7我們也可以切片,
輸入:
a[1:5]輸出:
array([5, 1, 7, 6])我們輸入了[1:5]。因此,切片將從索引1開始,在索引5之前結(jié)束。記住,包括下限,排除上限。
在本文中,我不再深入討論切片和索引。因?yàn)槲乙呀?jīng)寫了另一篇文章詳細(xì)解釋過了。請(qǐng)檢查一下。學(xué)好它很重要。
https://towardsdatascience.com/indexing-and-slicing-of-1d-2d-and-3d-arrays-in-numpy-e731afff0bbe
添加行或列
Numpy有幾種不同的方法來添加行或列。這里有一些例子。
這次我將使用一些列表或數(shù)組。Numpy會(huì)在堆疊時(shí)自動(dòng)將它們變成數(shù)組。
這里有兩個(gè)列表:
x1 = [[2, 4, 3, 7], [2, 5, 3, 1]] x2 = [1, 0, 9, 5]現(xiàn)在垂直堆疊它們。
輸入:
np.vstack([x1, x2])輸出:
array([[2, 4, 3, 7],[2, 5, 3, 1],[1, 0, 9, 5]])你可以把它們疊成你想要的次數(shù)。
輸入:
np.vstack([x1, x2, x2])輸出:
array([[2, 4, 3, 7],[2, 5, 3, 1],[1, 0, 9, 5],[1, 0, 9, 5]])讓我們做一些水平堆疊。我們需要行數(shù)相同的數(shù)組。
“x1”有2行。用它做一個(gè)數(shù)組。
輸入:
np.array(x1)輸出:
array([[2, 4, 3, 7],[2, 5, 3, 1]])生成另一個(gè)數(shù)組“x3”。
輸入:
x3 = np.ones((2,3)) x3輸出:
array([[1., 1., 1.],[1., 1., 1.]])水平堆疊
輸入:
np.hstack([x1, x3])輸出:
array([[2., 4., 3., 7., 1., 1., 1.],[2., 5., 3., 1., 1., 1., 1.]])連接
另一種添加列或行的方法。但與堆疊相反,這次我們需要兩個(gè)相同維度的數(shù)組。記住,當(dāng)我們進(jìn)行垂直堆疊時(shí),我們有一個(gè)二維和一維列表。
這是我在這個(gè)例子中的兩個(gè)列表。
x1 = [[2, 4, 3, 7], [2, 5, 3, 1]] x2 = [[1, 0, 9, 5]]concatenate操作
輸入:
np.concatenate((x1, x2), axis=0)輸出:
array([[2, 4, 3, 7],[2, 5, 3, 1],[1, 0, 9, 5]])現(xiàn)在,水平連接。但我們需要兩個(gè)行數(shù)相同的數(shù)組。
x3 = [[2,4], [7,5]]連接x1和x3。
輸入:
np.concatenate((x1, x3), axis=1)輸出:
array([[2, 4, 3, 7, 2, 4],[2, 5, 3, 1, 7, 5]])追加、插入、刪除和排序
你可能知道這些行動(dòng)的函數(shù)。
append
輸入:
np.append([2,3], [[4,5], [1, 3]])輸出:
array([2, 3, 4, 5, 1, 3])輸入:
np.append([2, 3, 1], [[4, 5], [1,3]])輸出:
array([2, 3, 1, 4, 5, 1, 3]我們?cè)谶@些例子中沒有提到任何軸心。所以,默認(rèn)情況下,它們?nèi)≥S1,或者在列方向或水平方向。現(xiàn)在,在垂直方向執(zhí)行追加操作。
輸入:
np.append([[1,3,5], [4,3,6]], [[1,2,3]], axis=0)輸出:
array([[1, 3, 5],[4, 3, 6],[1, 2, 3]])Insert
這次我們將在某個(gè)位置插入一個(gè)元素。從一個(gè)新數(shù)組開始。
輸入:
a = np.array([[2, 2], [3, 4], [5, 6]]) a輸出:
array([[2, 2],[3, 4],[5, 6]])在數(shù)組的開頭插入元素5。
輸入:
np.insert(a, 0, 5)輸出:
array([5, 2, 2, 3, 4, 5, 6])首先,理解輸入。在(a,0,5)中,a是數(shù)組,0是要插入元素的位置,5是要插入的元素。
注意,插入是如何發(fā)生的。首先,二維數(shù)組a被展平成一維數(shù)組。然后在索引0處添加5。
我們也可以沿著軸插入。
輸入:
np.insert(a, 0, 5, axis=1)輸出:
array([[5, 2, 2],[5, 3, 4],[5, 5, 6]])看,一列5被添加到數(shù)組'a'中。我們也可以添加一行5。
輸入:
np.insert(a, 0, 5, axis=0)輸出:
array([[5, 5],[2, 2],[3, 4],[5, 6]])Delete
我會(huì)像以前一樣做一個(gè)新的數(shù)組。
輸入:
a= np.array([[1,3,2,6], [4,1,6,7], [9, 10, 6, 3]]) a輸出:
array([[ 1, 3, 2, 6],[ 4, 1, 6, 7],[ 9, 10, 6, 3]])輸入:
np.delete(a, [1, 2, 5])輸出:
array([ 1, 6, 4, 6, 7, 9, 10, 6, 3])與插入操作一樣,刪除操作也會(huì)使數(shù)組變平。在輸入[1,2,5]中是要?jiǎng)h除的索引列表。為了清楚地看到它,讓我們展平原始數(shù)組'a'。
輸入:
a.flatten()輸出:
array([ 1, 3, 2, 6, 4, 1, 6, 7, 9, 10, 6, 3])現(xiàn)在檢查一下,索引1、2和5的元素都被刪除了。
與插入類似,我們可以刪除特定的行或列。
刪除列索引1。
輸入:
np.delete(a, 1, 1)輸出:
array([[1, 2, 6],[4, 6, 7],[9, 6, 3]])在輸入(a,1,1)中,a是數(shù)組,1是要?jiǎng)h除的列的索引,最后一個(gè)1是軸。
輸入:
np.delete(a, 1, 0)輸出:
array([[ 1, 3, 2, 6],[ 9, 10, 6, 3]])Sort
數(shù)組“a”:
array([[ 1, 3, 2, 6],[ 4, 1, 6, 7],[ 9, 10, 6, 3]])輸入:
np.sort(a)輸出:
array([[ 1, 2, 3, 6],[ 1, 4, 6, 7],[ 3, 6, 9, 10]])看,它是雙向排列的。我們可以指定軸并按特定軸排序。
輸入:
np.sort(a, axis=None)輸出:
array([ 1, 1, 2, 3, 3, 4, 6, 6, 6, 7, 9, 10])當(dāng)軸為“None”時(shí),它展平數(shù)組并進(jìn)行排序。現(xiàn)在,按軸0和軸1排序。
輸入:
np.sort(a, axis=0)輸出:
array([[ 1, 1, 2, 3],[ 4, 3, 6, 6],[ 9, 10, 6, 7]])輸入:
np.sort(a, axis=1)輸出:
array([[ 1, 2, 3, 6],[ 1, 4, 6, 7],[ 3, 6, 9, 10]])Flip
它確實(shí)像聽起來那樣。翻轉(zhuǎn)數(shù)組和行。
這是該數(shù)組。
arr輸出:
array([[ 1, 2, 3, 4],[ 5, 6, 7, 8],[ 9, 10, 11, 12]])現(xiàn)在,沿軸0和1的方向翻轉(zhuǎn)該數(shù)組。
輸入:
np.flip(arr, 0)輸出:
array([[ 9, 10, 11, 12],[ 5, 6, 7, 8],[ 1, 2, 3, 4]])輸入:
np.flip(arr, 1)輸出:
array([[ 4, 3, 2, 1],[ 8, 7, 6, 5],[12, 11, 10, 9]])隨機(jī)
Numpy有很好的隨機(jī)數(shù)生成功能。它們?cè)跈C(jī)器學(xué)習(xí)、研究或統(tǒng)計(jì)方面非常有用。這里有一些例子。
輸入:
np.random.rand()輸出:
0.541670003513435它生成一個(gè)介于0到1之間的數(shù)字。我們可以從這樣的隨機(jī)數(shù)中得到一個(gè)數(shù)組或矩陣。
輸入:
np.random.rand(3)輸出:
array([0.6432591 , 0.78715203, 0.81071309])輸入:
np.random.rand(2, 3)輸出:
array([[0.91757316, 0.74438045, 0.85259742],[0.19826903, 0.84990728, 0.48328816]])它不一定是從0到1的數(shù)字。我們可以生成隨機(jī)整數(shù)。
輸入:
np.random.randint(25)輸出:
20它產(chǎn)生了一個(gè)0到25范圍內(nèi)的隨機(jī)數(shù)。我們可以指定要生成多少個(gè)數(shù)字。
輸入:
np.random.randint(1, 100, 10)輸出:
array([96, 44, 90, 13, 47, 16, 9, 46, 49, 20])在這里,我們要求Numpy生成10個(gè)介于1到100之間的數(shù)字。
現(xiàn)在,生成1到100范圍內(nèi)的3x3矩陣。
輸入:
np.random.randint(1, 100, (3,3))輸出:
array([[25, 80, 42],[95, 82, 66],[64, 95, 55]])你可以提供一個(gè)數(shù)組,并要求Numpy使用你提供的數(shù)組中的數(shù)字生成一個(gè)3x3矩陣,而不是一個(gè)范圍。
輸入:
np.random.choice([1,2,3,4,5,6,7,8,9,10], size=(3,3))輸出:
array([[ 7, 9, 2],[ 6, 4, 6],[ 3, 10, 6]])另一個(gè)有用的函數(shù)是“shuffle”。讓我們做一個(gè)新的數(shù)組并進(jìn)行shuffle。
輸入:
a = np.array([3,6,3,1,0, 11]) np.random.shuffle(a) a輸出:
array([ 3, 0, 6, 3, 11, 1])聽著,我們有相同的元素,只是在shuffle后重新排列。
保存、加載和導(dǎo)入文件
我們可以將數(shù)組“arr”保存在一個(gè)文件中。
輸入:
np.save('arrfile', arr)這里,我們正在生成一個(gè)名為“arrfile”的文件來保存數(shù)組“arr”。文件將以“.npy”擴(kuò)展名保存。
我們可以加載該文件并將其帶回來繼續(xù)使用該數(shù)組,
輸入:
np.load('arrfile.npy')輸出:
array([[ 1, 2, 3, 4],[ 5, 6, 7, 8],[ 9, 10, 11, 12]])我們可以使用Numpy作為數(shù)組導(dǎo)入CSV文件或文本文件。我在Jupyter Notebook相同的文件夾中有一個(gè)名為'Cartwheeldata.csv“,我編寫了這些示例。現(xiàn)在,在這里導(dǎo)入該文件。
輸入:
filedata = np.genfromtxt('Cartwheeldata.csv', delimiter=',') filedata=filedata.astype('int32') filedata輸出:
我在這里展示數(shù)組的一部分。因?yàn)槲募艽蟆K?#xff0c;這是關(guān)于那個(gè)文件的部分信息。
這些類型的數(shù)組在機(jī)器學(xué)習(xí)中非常有用。
結(jié)論
這就是我想在本文中分享的所有Numpy函數(shù)。Numpy是個(gè)大庫。它有很多可用的方法。但是這些函數(shù)應(yīng)該足夠適合日常使用。
原文鏈接:https://towardsdatascience.com/an-ultimate-cheat-sheet-for-numpy-bb1112b0488f
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的numpy 平方_Numpy的终极备忘录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mfc mysql 选择删除文件_MFC
- 下一篇: for循环如果先--_乐字节Java循环