詳解如何利用Numpy生成各種各樣的數(shù)組
現(xiàn)在我們對(duì) Numpy 有了基本的了解,利用 Numpy 能夠幫助我們提高計(jì)算效率,利用 Numpy 的 ndarray 多維數(shù)組對(duì)象存儲(chǔ)數(shù)據(jù)能夠減少內(nèi)存占用,Numpy 的這些優(yōu)勢(shì)使得它廣泛應(yīng)用于人工智能、計(jì)算機(jī)視覺、生物信息等領(lǐng)域。 使用Numpy進(jìn)行數(shù)據(jù)處理和科學(xué)計(jì)算時(shí),生成各種類型的數(shù)組是非常常見的需求,有的需要全 0 數(shù)組,有的需要滿足正態(tài)分布的數(shù)組。Numpy提供了多種函數(shù)和方法,可以方便地生成不同形狀和類型的數(shù)組。今天我就帶大家學(xué)習(xí)一下如何利用 Numpy 生成各種各樣的數(shù)組。
生成 0 和 1 的數(shù)組
我們知道在圖像處理中,我們通常是借助矩陣來(lái)表示圖片的顏色,全 0 數(shù)組表示黑色,全 1 數(shù)組表示白色;在數(shù)據(jù)處理過程中,有時(shí)也需要借助全 0 或全 1 數(shù)組表示邊界條件和權(quán)重。
下面我們就來(lái)看看如何利用 Numpy 生成一個(gè)全 0 或全 1 數(shù)組吧!
zeros 方法創(chuàng)建全 0 數(shù)組
我們先來(lái)學(xué)習(xí)一下如何生成一個(gè)全 0 數(shù)組吧!
比如在植物大戰(zhàn)僵尸中,游戲開始時(shí),草坪上沒有植物,這時(shí)我們便可以通過一個(gè)全 0 數(shù)組代表草坪的初始狀態(tài)?,F(xiàn)在我們需要初始化一個(gè)六行八列的草坪,該如何實(shí)現(xiàn)呢?
代碼示例:
import numpy as np zeroArry=np.zeros((6,8)) print(zeroArry)
輸出結(jié)果:
[[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]]
可以看見在利用 zeros 方法創(chuàng)建一個(gè)全 0 數(shù)組時(shí),我們只需要傳入所需數(shù)組的形狀便可以創(chuàng)建出所需形狀的全 0 數(shù)組。
學(xué)習(xí)完了如何創(chuàng)建全 0 數(shù)組,下面我們?cè)賮?lái)看看如何創(chuàng)建全 1 數(shù)組吧!
ones 方法創(chuàng)建全 1 數(shù)組
全 1 數(shù)組與全 0 數(shù)組的作用基本相同,同樣也可以用于數(shù)據(jù)的初始化。比如,掃雷游戲,開始時(shí)整個(gè)地圖我們都沒有查看過,這時(shí)我們便可是設(shè)置一個(gè)全 1 數(shù)組表示這一初始狀態(tài),現(xiàn)在我們要初始化一個(gè)四行三列的地圖該如何處理呢?
代碼示例:
import numpy as np oneArry=np.ones((3,4)) print(oneArry)
輸出結(jié)果:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
同創(chuàng)建全 0 數(shù)組一樣,我們只需傳入所需數(shù)組的形狀即可創(chuàng)建所需形狀的全 1 數(shù)組。我們可以看到,不管是 0 填充還是 1 填充,默認(rèn)的數(shù)據(jù)類型都是為浮點(diǎn)數(shù)
,這值得我們注意。
同時(shí)在一些情況下,我們可能需要預(yù)先分配足夠的空間以容納即將到來(lái)的數(shù)據(jù)時(shí),這時(shí)我們就需要?jiǎng)?chuàng)建一個(gè)未初始化的空數(shù)組來(lái)完成,那么如何才能創(chuàng)建一個(gè)指定形狀的空數(shù)組呢?
empty 方法創(chuàng)建未初始化數(shù)組
empty 方法是用來(lái)創(chuàng)建一個(gè)指定形狀、指定數(shù)據(jù)類型并且未初始化的數(shù)組。未初始化指的就是對(duì)于其中的數(shù)據(jù)并沒有被指定填充值。
比如,在實(shí)驗(yàn)中我們還并未知曉實(shí)驗(yàn)數(shù)據(jù),但需要提前分配一個(gè)三行四列的地址空間,該如何處理呢?代碼示例:
import numpy as np emptyArry=np.empty((3,4)) print(emptyArry)
輸出結(jié)果:
[[6.23042070e-307 4.67296746e-307 1.69121096e-306 4.67293691e-307]
[2.22518251e-306 1.60218491e-306 1.37962320e-306 1.78019354e-306]
[2.22522597e-306 1.33511969e-306 1.15711378e-306 1.16826224e-307]]
可以看到其中會(huì)出現(xiàn)數(shù)據(jù),我們之前不是說(shuō)沒有指定填充值嗎,這里為什么又會(huì)出現(xiàn)值呢?這其實(shí)不難理解,未初始化并不代表沒有值,為了程序的安全,未初始化的變量程序會(huì)根據(jù)編譯器的設(shè)置填充一些值,比如這里的隨機(jī)值。
此外,在數(shù)學(xué)中,特別是在物理中,我們知道一些數(shù)據(jù)都是存在一些規(guī)律的,在進(jìn)行一些模擬驗(yàn)證時(shí)也是需要這樣一些具有規(guī)律的數(shù)據(jù),用鍵盤一個(gè)一個(gè)輸入這些數(shù)據(jù)往往是不現(xiàn)實(shí)的,NumPy 作為科學(xué)計(jì)算的利器,也是將這類數(shù)據(jù)考慮其中,建立相對(duì)應(yīng)的方法。比如:我們想要?jiǎng)?chuàng)建一個(gè)對(duì)角矩陣該如何處理呢?
eye 方法創(chuàng)建對(duì)角數(shù)組
線性代數(shù)的對(duì)角矩陣(首先數(shù)組是方陣,即 n×n,其次是對(duì)角線全為 1,其余位置都為 0),由于對(duì)角矩陣具有特殊的性質(zhì),能夠簡(jiǎn)化運(yùn)算,所以在計(jì)算時(shí)用到的時(shí)候很多,NumPy 當(dāng)然也不會(huì)放過這個(gè)特殊的矩陣,創(chuàng)造了 eye() 函數(shù)來(lái)創(chuàng)建對(duì)角矩陣。
比如,我們要?jiǎng)?chuàng)建一個(gè)五行五列的對(duì)角矩陣該如何處理呢?
代碼示例:
import numpy as np eyeArry=np.eye(5) print(eyeArry)
輸出結(jié)果:
[[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.]]
可以看見,利用 eye 方法我們成功創(chuàng)建了對(duì)角矩陣并且默認(rèn)數(shù)據(jù)類型為浮點(diǎn)型。
到這里,利用 Numpy 創(chuàng)建一些特殊的矩陣我們就介紹完了,下面我們?cè)賮?lái)看看如何利用已有數(shù)組生成新數(shù)組呢?
從現(xiàn)有數(shù)組中生成新數(shù)組
利用現(xiàn)有數(shù)組生成新數(shù)組的方式大概有三種方法,分別為 array 方法
、asarray 方法
以及 copy 方法
。下面我們就來(lái)看看如何利用這三種方法生成新數(shù)組吧!
array 方法
首先我們先來(lái)看看 array 方法,看看如何借此方法生成新數(shù)組。
方法:numpy.array(object,dtype,shape)
- object 為要轉(zhuǎn)化為 Numpy 數(shù)組的數(shù)據(jù)對(duì)象,可以為列表、元組或者數(shù)組;
- dtype 為轉(zhuǎn)化后數(shù)組的數(shù)據(jù)類型,若不設(shè)置則與原數(shù)據(jù)對(duì)象的數(shù)據(jù)類型保持一致;
- shape 用于指定數(shù)組的形狀,若不設(shè)置則與原數(shù)據(jù)對(duì)象的 shape 相同。
下面我們就來(lái)看看如何利用 array 方法生成新數(shù)組。
代碼示例:
import numpy as np arr1=np.array([1,2,3,4,5]) arr2=np.array(arr1) print(arr2)
輸出結(jié)果:
[1 2 3 4 5]
可以看見,我們利用 array 方法,成功借助 arr1 數(shù)組生成了 arr2 這個(gè)新數(shù)組,新數(shù)組的數(shù)據(jù)與原數(shù)組相同,數(shù)據(jù)類型也相同。下面我們?cè)賮?lái)看看如何利用 asarray 方法生成新數(shù)組。
asarray 方法
方法:numpy.asarray(object,dtype)
- object 為要轉(zhuǎn)化為 Numpy 數(shù)組的數(shù)據(jù)對(duì)象,可以為列表、元組或者數(shù)組;
- dtype 為轉(zhuǎn)化后數(shù)組的數(shù)據(jù)類型,若不設(shè)置則與原數(shù)據(jù)對(duì)象的數(shù)據(jù)類型保持一致。
下面我們就來(lái)看一下如何利用 asarray 函數(shù)生成新數(shù)組吧!
代碼示例:
import numpy as np arr1=np.array([1,2,3,4,5]) arr3=np.asarray(arr1) print(arr3)
輸出結(jié)果:
[1 2 3 4 5]
可以看見,借助 asarray 方法我們也成功生成了新數(shù)組。下面我們?cè)賮?lái)看看如何利用 copy 方法生成新數(shù)組呢!
copy 方法
方法:numpy.copy(object)
object 為要?jiǎng)?chuàng)建副本的數(shù)據(jù)對(duì)象,可以為列表、元組或者數(shù)組。
下面我們就來(lái)看看如何利用 copy 函數(shù)生成新的數(shù)組吧!
代碼示例:
import numpy as np arr1=np.array([1,2,3,4,5]) arr4=np.copy(arr1) print(arr4)
輸出結(jié)果:
[1 2 3 4 5]
通過觀察以上三個(gè)案例,我們發(fā)現(xiàn)它們生成新數(shù)組的操作是基本相同的,但是它們是否有什么區(qū)別呢?下面我們就通過個(gè)案例帶領(lǐng)大家了解。
當(dāng)我們用原數(shù)組生成新數(shù)組后,對(duì)原數(shù)組進(jìn)行修改新數(shù)組是否會(huì)改變呢?讓我們來(lái)一起看看吧!
代碼示例:
import numpy as np arr1=np.array([1,2,3,4,5]) arr2=np.array(arr1) arr3=np.asarray(arr1) arr4=np.copy(arr1) arr1[0]=100 print('更改后arr2為:',arr2) print('更改后arr3為:',arr3) print('更改后arr4為:',arr4)
輸出結(jié)果:
更改后arr2為: [1 2 3 4 5]
更改后arr3為: [100 2 3 4 5]
更改后arr4為: [1 2 3 4 5]
可以看見,對(duì)原數(shù)組的第一個(gè)數(shù)據(jù)進(jìn)行修改之后,利用 array 和 copy 方法生成的新數(shù)組并沒有被修改,而利用 asarray 方法生成的新數(shù)組則發(fā)生了同樣的改變。
當(dāng)涉及Numpy數(shù)組的復(fù)制和創(chuàng)建新數(shù)組時(shí),了解array、copy和asarray方法之間的區(qū)別是很重要的。它們?cè)谏尚聰?shù)組時(shí)有不同的行為和影響,主要區(qū)別如下:
array方法:
行為:array方法創(chuàng)建原始數(shù)組的副本,即進(jìn)行深拷貝。
影響:生成的新數(shù)組與原始數(shù)組完全獨(dú)立,修改新數(shù)組不會(huì)影響原始數(shù)組,新數(shù)組和原數(shù)組在內(nèi)存中擁有不同的地址。
copy方法:
行為:copy方法創(chuàng)建原始數(shù)組的副本,同樣進(jìn)行深拷貝。
影響:生成的新數(shù)組與原始數(shù)組完全獨(dú)立,修改新數(shù)組不會(huì)影響原始數(shù)組,新數(shù)組和原數(shù)組在內(nèi)存中擁有不同的地址。
asarray方法:
行為:asarray方法創(chuàng)建原始數(shù)組的視圖,即進(jìn)行淺拷貝。如果原始數(shù)組是Numpy數(shù)組,則不會(huì)復(fù)制數(shù)據(jù),而只是共享相同的數(shù)據(jù)存儲(chǔ)。如果原始數(shù)組是普通的Python列表或元組,則會(huì)復(fù)制數(shù)據(jù)。
影響:生成的新數(shù)組與原始數(shù)組共享相同的數(shù)據(jù)存儲(chǔ),修改新數(shù)組將會(huì)影響原始數(shù)組。新數(shù)組和原數(shù)組在內(nèi)存中具有相同的地址,但數(shù)據(jù)是否共享取決于原始數(shù)組的類型。
它們?nèi)叩膮^(qū)別在于生成的新數(shù)組和原始數(shù)組在內(nèi)存中的關(guān)系以及是否共享數(shù)據(jù)存儲(chǔ)。如果需要?jiǎng)?chuàng)建完全獨(dú)立的數(shù)組,應(yīng)使用array或copy方法。如果需要共享數(shù)據(jù)存儲(chǔ)或希望節(jié)省內(nèi)存,可以考慮使用asarray方法。
由此,我們知道:array 和 copy 方法生成的是原數(shù)組的副本,是對(duì)原數(shù)組進(jìn)行的深拷貝,新數(shù)組的內(nèi)存地址與原數(shù)組是不同的;asarray 是對(duì)原數(shù)組進(jìn)行的淺拷貝,它是原數(shù)組的視圖,新數(shù)組的內(nèi)存地址與原數(shù)組的內(nèi)存地址是相同的。
下面我們就來(lái)學(xué)習(xí)生成數(shù)組的另一種方法——生成固定范圍的數(shù)組。
生成固定范圍的數(shù)組
生成固定的數(shù)組即生成包含我們所需范圍內(nèi)的數(shù)據(jù)的數(shù)組,主要有兩種方法分別為 linspace 方法
和 arange 方法
。
linspace 方法
方法:linspace(start,stop,num)
- start 為數(shù)據(jù)的起始點(diǎn)。
- stop 為數(shù)據(jù)的結(jié)束點(diǎn)。
- num 為等步長(zhǎng)生成的數(shù)據(jù)量。
下面我們就利用該方法生成一個(gè)數(shù)組,起始點(diǎn)為 0,結(jié)束點(diǎn)為 100,數(shù)據(jù)量為 5 的數(shù)組吧!
代碼示例:
import numpy as np arr=np.linspace(0,100,5) print(arr)
輸出結(jié)果:
[ 0. 25. 50. 75. 100.]
可以看見,我們成功得到了一個(gè)數(shù)據(jù)量為 5 的等距數(shù)組,默認(rèn)數(shù)據(jù)類型為浮點(diǎn)型。同時(shí),我們可以看見生成的數(shù)組是包括了我們?cè)O(shè)置的數(shù)據(jù)范圍的邊界的,我們可以簡(jiǎn)記為“左閉右閉
”原則。在數(shù)學(xué)上,如果我們需要生成一定范圍內(nèi)的指定數(shù)據(jù)量的等距數(shù)組時(shí)便可以通過該方法獲取。
下面我們?cè)賮?lái)看看如何利用 arange 生成指定范圍的數(shù)組吧!
arange 方法
方法:arange(start,stop,step,dtype)
- start 為數(shù)據(jù)起始點(diǎn)。
- stop 為數(shù)據(jù)終點(diǎn)。
- step 為數(shù)據(jù)之間的步長(zhǎng),默認(rèn)為 1。
- dtype 用于指定數(shù)組的數(shù)據(jù)類型,默認(rèn)為浮點(diǎn)型。
下面我們就來(lái)通過該方法生成一個(gè)范圍 0-100、數(shù)據(jù)步長(zhǎng)為 5 的等差數(shù)列吧!
代碼示例:
import numpy as np arr=np.arange(0,100,5) print(arr)
輸出結(jié)果:
[ 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95]
可以看見,利用 arange 函數(shù),我們能夠生成一定數(shù)據(jù)范圍內(nèi)的等差數(shù)列,我們發(fā)現(xiàn)該方法生成的數(shù)組的數(shù)據(jù)類型為整型,并且并沒有包括邊界值,我們可以簡(jiǎn)記為“左閉右開
”。在處理數(shù)學(xué)問題時(shí),我們可以借助該方法生成一定數(shù)據(jù)范圍內(nèi)的等差數(shù)列。
通過上述兩個(gè)案例,我們可以發(fā)現(xiàn):linspace 方法用于生成一定數(shù)據(jù)范圍內(nèi)的所需數(shù)據(jù)量的數(shù)組,默認(rèn)數(shù)據(jù)類型為浮點(diǎn)型,生成的數(shù)據(jù)包括數(shù)據(jù)邊界;arange 方法用于生成一定范圍內(nèi)的指定步長(zhǎng)的等差數(shù)列,默認(rèn)數(shù)據(jù)類型為整型,生成的數(shù)據(jù)不包括數(shù)據(jù)邊界。
學(xué)習(xí)了生成固定范圍的數(shù)組,下面我們?cè)賮?lái)學(xué)習(xí)一下如何生成隨機(jī)的數(shù)組吧!
生成隨機(jī)數(shù)組
當(dāng)我們處理大量數(shù)據(jù)或需要進(jìn)行隨機(jī)實(shí)驗(yàn)時(shí),隨機(jī)數(shù)組是不可或缺的工具。
隨機(jī)數(shù)組是指由隨機(jī)數(shù)組成的數(shù)組,它廣泛應(yīng)用于各種領(lǐng)域,例如統(tǒng)計(jì)學(xué)、數(shù)據(jù)分析、模擬、游戲開發(fā)等。例如:在角色扮演游戲中,我們可以使用隨機(jī)數(shù)組生成隨機(jī)的戰(zhàn)斗傷害、經(jīng)驗(yàn)值或掉落物品,以增加游戲的趣味性和可玩性;在電路模擬中,我們可以使用隨機(jī)數(shù)組生成隨機(jī)的噪聲信號(hào),以評(píng)估電路的性能和穩(wěn)定性。
在利用 Numpy 生成隨機(jī)數(shù)組時(shí),我們需要借助 random 模塊
。NumPy 的 random 模塊提供了一個(gè)用于生成隨機(jī)數(shù)的強(qiáng)大工具集。它包含了各種函數(shù)和類,可以用于生成不同類型的隨機(jī)數(shù),如整數(shù)、浮點(diǎn)數(shù)和隨機(jī)數(shù)組,此外還可以用于生成符合各種概率分布的數(shù)組。
下面我們就來(lái)看看如何利用 Numpy 的 random 模塊生成符合各種概率分布的數(shù)組吧!
均勻分布隨機(jī)數(shù)組
生成均勻分布隨機(jī)數(shù)組主要有 rand
方法和 uniform
兩種方法。
首先我們來(lái)看看如何利用 random 生成符合均勻分布的隨機(jī)數(shù)組呢。
rand 方法
rand 用于生成 0-1 區(qū)間內(nèi)指定數(shù)量的均勻分布的隨機(jī)數(shù)組。
方法:rand(shape,dtype)
- shape 為數(shù)組的形狀。
- dtype 為數(shù)組的數(shù)據(jù)類型,默認(rèn)為浮點(diǎn)型。
比如,在游戲中,要求擊殺野怪后會(huì)爆 15 個(gè)裝備之一,我們便可以利用 rand 方法生成一個(gè)數(shù)值范圍 0-1 的符合均勻分布的大小為 15 的數(shù)組來(lái)表示各個(gè)裝備出現(xiàn)的概率。
代碼示例:
import numpy as np arr=np.random.rand(15) print(arr)****
輸出結(jié)果:
[0.62143845 0.12778872 0.87422787 0.95940872 0.66958581 0.15454008
0.76071261 0.15836626 0.77351804 0.87778616 0.20672373 0.85318471
0.98831228 0.21829142 0.83702802]
可以看見,我們成功得到了數(shù)據(jù)量為 15 符合均勻分布的裝備概率數(shù)組,據(jù)此來(lái)決定刷怪后出現(xiàn)什么裝備。不過該方法的缺點(diǎn)就是只能生成數(shù)據(jù)范圍 0-1 內(nèi)的均勻分布數(shù)組。
下面我們?cè)賮?lái)看看 uniform 有什么不同呢。
uniform 方法
uniform 方法用于生成指定范圍內(nèi)的均勻分布的數(shù)組,相較于 rand 方法更為靈活。
方法:uniform(low,high,size)
- size 為數(shù)組的形狀。
- low 為隨機(jī)數(shù)的最小值。
- high 為隨機(jī)數(shù)的最大值。
比如:我們?cè)谟螒蛑?,往往?huì)遇到吃一個(gè)果子既可能中毒減少血量,也可能治療增加血量,這時(shí)候我們就可以利用該函數(shù)實(shí)現(xiàn)。比如最大減血量為 100,最大加血量為 100,怎樣得到這個(gè)范圍內(nèi)的隨機(jī)數(shù)呢?
代碼示例:
import numpy as np arr=np.random.uniform(-100,100,1) print(arr)
輸出結(jié)果:
[18.41991632]
可以看見,該結(jié)果就代表給玩家增加 18.41991632 的血量。通過案例,我們知道利用 uniform 生成均勻分布的隨機(jī)數(shù)組要更為靈活
,它除了可以生成 0-1 內(nèi)的均勻分布數(shù)組外,還可以生成其他范圍內(nèi)的均勻分布數(shù)組。
下面我們?cè)賮?lái)學(xué)習(xí)一下如何生成一組符合正態(tài)分布的數(shù)組呢。
正態(tài)分布隨機(jī)數(shù)組
生成正態(tài)分布數(shù)組的方法組要有兩種,分別為 normal
方法和 standard_normal
方法。
下面我們就先從 normal 方法開始看看如何利用這些方法生成正態(tài)分布的數(shù)組。
normal 方法
方法:normal(loc,scale,size)
。
- loc 為正態(tài)分布數(shù)組的均值,
- scale 為數(shù)組的方差,
- 通過 size 屬性我們能夠設(shè)置數(shù)組的形狀或者數(shù)據(jù)量。
通常一個(gè)班級(jí)同學(xué)的成績(jī)是符合正態(tài)分布的,下面我們就用 normal 模擬一個(gè)班級(jí)的期末成績(jī),其中均值為 60,方差為 81,學(xué)生人數(shù)為 20 人。
代碼示例:
import numpy as np score=np.random.normal(60,9,20) print(score)
輸出結(jié)果:
[61.06296251 62.24716851 60.59643633 61.66150912 54.31424568 50.0636896
85.25668733 65.97137913 74.13954099 59.70926632 32.06950931 55.49741382
67.09152988 52.56268941 44.34325786 58.75831326 68.99711559 58.05501051
52.57707606 61.42147338]
可以看見,利用上述方法我們成功生成了一組符合正態(tài)分布的學(xué)生成績(jī)。normal 方法的優(yōu)點(diǎn)就在于非常靈活,我們可以根據(jù)自己需求設(shè)置數(shù)組的方差和均值。
下面我們?cè)賮?lái)看看如何利用 standard_normal 方法生成正態(tài)分布數(shù)組吧!
standard_normal 方法
利用 standard_normal 方法用于生成指定形狀的符合標(biāo)準(zhǔn)正態(tài)分布的數(shù)組,該方法與 normal 方法相比不是很靈活,但是參數(shù)較少,我們只需要指定數(shù)組形狀便可以生成指定形狀的標(biāo)準(zhǔn)正態(tài)分布的數(shù)組。
方法:standard_normal(size)
size 為隨機(jī)數(shù)組的形狀。
在機(jī)器學(xué)習(xí)中,生成一組符合標(biāo)準(zhǔn)正態(tài)分布的數(shù)組可以用于初始化模型的參數(shù),特別是對(duì)于需要隨機(jī)初始化的算法,例如隨機(jī)梯度下降等。通過將參數(shù)初始化為標(biāo)準(zhǔn)正態(tài)分布,可以幫助模型更好地收斂到最優(yōu)解,并提高模型的性能和準(zhǔn)確性。
下面我們就生成一個(gè)形狀為三行四列的符合標(biāo)準(zhǔn)正態(tài)分布的數(shù)組,用于實(shí)現(xiàn)模型參數(shù)的初始化。
代碼示例:
import numpy as np arr=np.random.standard_normal((3,4)) print(arr)
輸出結(jié)果:
[[-0.05899553 -1.0534277 -1.18875175 0.91898097]
[-0.58510129 2.3321576 1.00022868 -0.11486971]
[ 3.02941126 -0.72335555 0.71833573 -0.30375334]]
可以看見我們成功生成了標(biāo)準(zhǔn)正態(tài)分布的二維數(shù)組。
學(xué)習(xí)生成隨機(jī)數(shù)組能夠幫助我們更好地解決生活中遇到的隨機(jī)問題,通過 Numpy 生成符合要求的數(shù)組,進(jìn)而隨機(jī)情況。
到這里,如何利用 Numpy 生成各種各樣的數(shù)組我們就介紹完成了,大家可以仔細(xì)學(xué)習(xí)相關(guān)方法,因?yàn)?Numpy 的一切數(shù)據(jù)處理方法都是在創(chuàng)建的數(shù)組上進(jìn)行應(yīng)用的。
總結(jié)
Numpy 的 ndarray 數(shù)組對(duì)象是 Numpy 最為核心的數(shù)據(jù)對(duì)象,Numpy 的一切數(shù)據(jù)處理方法都是在 ndarray 對(duì)象上應(yīng)用的,所以學(xué)習(xí)創(chuàng)建 ndarray 數(shù)組非常重要。
在圖片處理等領(lǐng)域,我們可以利用 zeros 和 ones 函數(shù)生成全 1 或全 0 數(shù)組來(lái)代表黑色圖片以及白色圖片。在處理一些物理問題時(shí),往往需要借助一些特殊的矩陣,這時(shí)我們可以借助 eye 方法生成符合要求的對(duì)角矩陣。當(dāng)我們需要為數(shù)據(jù)預(yù)先分配內(nèi)存時(shí),可以借助 empty 生成空數(shù)組,對(duì)內(nèi)存空間進(jìn)行預(yù)分配。
利用已有數(shù)組生成新數(shù)組時(shí),array 和 copy 方法生成的是原數(shù)組的副本,是對(duì)原數(shù)組進(jìn)行的深拷貝,新數(shù)組的內(nèi)存地址與原數(shù)組是不同的;asarray 是對(duì)原數(shù)組進(jìn)行的淺拷貝,它是原數(shù)組的視圖,新數(shù)組的內(nèi)存地址與原數(shù)組的內(nèi)存地址是相同的。
如果想要生成指定個(gè)數(shù)的等距數(shù)組,我們可以使用 linspace 方法,要注意該方法生成的數(shù)組是包括邊界值的;如果想要設(shè)置數(shù)據(jù)之間的步長(zhǎng),我們可以借助 arange 方法,該方法生成的數(shù)組是不包括邊界值的。
在處理概率論問題時(shí),如果想要生成均勻分布的數(shù)組,我推薦大家使用 uniform 方法,該方法能夠指定數(shù)據(jù)范圍,使用起來(lái)相對(duì)靈活;如果想要生成符合正態(tài)分布的數(shù)組,我推薦大家使用 normal 方法,利用該方法我們能夠指定數(shù)組的方差和均值,使用起來(lái)也比較靈活,既可以生成符合標(biāo)準(zhǔn)正態(tài)分布的數(shù)組,也可以生成符合其他類型的正態(tài)分布的數(shù)組。
以上就是詳解如何利用Numpy生成各種各樣的數(shù)組的詳細(xì)內(nèi)容,更多關(guān)于Numpy數(shù)組的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章
相關(guān)文章
利用python實(shí)現(xiàn)PSO算法優(yōu)化二元函數(shù)
這篇文章主要介紹了python實(shí)現(xiàn)PSO算法優(yōu)化二元函數(shù)的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11Win7下Python與Tensorflow-CPU版開發(fā)環(huán)境的安裝與配置過程
這篇文章主要介紹了Win7下Python與Tensorflow-CPU版安裝與配置心得,需要的朋友可以參考下2018-01-01Python+Pygame實(shí)現(xiàn)海洋之神大冒險(xiǎn)游戲
這篇文章主要介紹了如何利用Python+Pygame自制一個(gè)海洋之神大冒險(xiǎn)游戲。規(guī)則是在海里收集魚骨頭,有些魚骨頭可以轉(zhuǎn)化為武器,用來(lái)攻擊敵人,感興趣的可以了解一下2022-08-08JupyterNotebook設(shè)置Python環(huán)境的方法步驟
這篇文章主要介紹了JupyterNotebook設(shè)置Python環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python編程快速上手——strip()函數(shù)的正則表達(dá)式實(shí)現(xiàn)方法分析
這篇文章主要介紹了Python strip()函數(shù)的正則表達(dá)式實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python基于正則表達(dá)式實(shí)現(xiàn)strip()函數(shù)的方法,需要的朋友可以參考下2020-02-02聊聊python里如何用Borg pattern實(shí)現(xiàn)的單例模式
這篇文章主要介紹了聊聊python里如何用Borg pattern實(shí)現(xiàn)的單例模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-06-06