Python NumPy創(chuàng)建數(shù)組方法
1. 蠻力構(gòu)造法
np.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
import numpy as np # 如果不指定數(shù)據(jù)類型,就會(huì)根據(jù)object參數(shù)自動(dòng)選擇合適的數(shù)據(jù)類型 a = np.array([[1, 2, 3], [4, 5, 6]]) # 也可以在創(chuàng)建數(shù)組時(shí),指定元素的數(shù)據(jù)類型 b = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)
2. 特殊數(shù)值法
這里的特殊數(shù)值指的是0、1、空值。特殊數(shù)值法適合構(gòu)造全0、全1、空數(shù)組,或由0、1組成的類似單位矩陣(主對(duì)角線為1,其余為0)的數(shù)組。
np.zeros(shape, dtype=float, order='C') np.ones(shape, dtype=float, order='C') np.empty(shape, dtype=float, order='C') np.eye(N, M=None, k=0, dtype=float, order='C')
固定參數(shù)shape表示生成的數(shù)組結(jié)構(gòu),默認(rèn)參數(shù)dtype用于指定數(shù)據(jù)類型(默認(rèn)浮點(diǎn)型)。order參數(shù)指定的是數(shù)組在內(nèi)存中的存儲(chǔ)順序,'C'
表示C語(yǔ)言使用的行為優(yōu)先方式,'F'
表示Fortran語(yǔ)言使用的列優(yōu)先方式
import numpy as np print(np.zeros(6)) print(np.zeros((2, 3))) print(np.ones((2, 3), dtype=int)) print(np.empty((2, 3))) print(np.eye(3, dtype=np.uint8))
如果需要一個(gè)3行4列,初始值都是255的無(wú)符號(hào)整型數(shù)組
- 方案1:全1數(shù)組乘以255
- 方案2:全0數(shù)組加255
- 方案3:使用填充函數(shù)
fill()
import numpy as np a = np.empty((3, 4), dtype=np.uint8) a.fill(255) print(a)
3. 隨機(jī)數(shù)值法
np.random.random(size=None) np.random.randint(low, high=None, size=None) np.random.normal(loc=0.0, scale=1.0, size=None)
random()
函數(shù)用于生成[0,1)
區(qū)間內(nèi)的隨機(jī)浮點(diǎn)型整數(shù),randint()
函數(shù)用于生成[low,high)
區(qū)間內(nèi)的隨機(jī)整形數(shù)組。參數(shù)size是一個(gè)元組,用于指定生成數(shù)組的結(jié)構(gòu)
import numpy as np print(np.random.random(3)) print(np.random.random((2, 3))) print(np.random.randint(5)) print(np.random.randint(1, 5, size=(2, 3)))
normal()
函數(shù)用于生成以loc為均值、以scale為標(biāo)準(zhǔn)差的正態(tài)分布數(shù)組。
import numpy as np # 導(dǎo)入繪圖模塊 import matplotlib.pyplot as plt # 生成正態(tài)分布數(shù)據(jù) tall = np.random.normal(170, 4, 1000) # 從156厘米到190厘米,每2厘米一個(gè)分段 bins = np.arange(156, 190, 2) # 繪制柱狀圖 plt.hist(tall, bins) # 顯示圖形 plt.show()
4. 定長(zhǎng)分割法
import numpy as np np.arange(start, stop, step, dtype=None) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
arange()
函數(shù)和Python的range()
函數(shù)用法相同,并且還可以接收浮點(diǎn)型參數(shù)
import numpy as np print(np.arange(5)) print(np.arange(5, 11)) print(np.arange(5, 11, 2)) print(np.arange(5.5, 11, 1.5)) print(np.arange(3, 15).reshape(3, 4))
linspace()
函數(shù)需要3個(gè)參數(shù):一個(gè)起點(diǎn)、一個(gè)終點(diǎn)、一個(gè)返回元素的個(gè)數(shù)。linspace()
函數(shù)返回的元素包括起點(diǎn)和終點(diǎn),可以通過(guò)endpoint
參數(shù)選擇是否包含終點(diǎn)
import numpy as np # 返回0到5之間的5個(gè)等距數(shù)值,包括0和5 print(np.linspace(0, 5, 5)) # 返回5個(gè)等距數(shù)值,包括0但不包括5 print(np.linspace(0, 5, 5, endpoint=False))
5. 重復(fù)構(gòu)造法
repeat()
函數(shù)用來(lái)重復(fù)數(shù)組元素。但如果被重復(fù)的數(shù)組是一個(gè)多維數(shù)組,且repeat()
函數(shù)指定了axis
參數(shù),情況就會(huì)變得有些復(fù)雜
import numpy as np a = np.arange(5) print(a) # 重復(fù)一維數(shù)組元素3次 print(np.repeat(a, 3)) a = np.arange(6).reshape((2, 3)) print(a) # 重復(fù)二維數(shù)組元素3次,不指定軸 print(np.repeat(a, 3)) # 重復(fù)二維數(shù)組元素3次,指定0軸 print(np.repeat(a, 3, axis=0)) # 重復(fù)二維數(shù)組元素3次,指定1軸 print(np.repeat(a, 3, axis=1))
tile()
將整個(gè)數(shù)組而非數(shù)組元素水平和垂直重復(fù)指定的次數(shù)
import numpy as np a = np.arange(5) print(a) # 重復(fù)一維數(shù)組3次 print(np.tile(a, 3)) # 重復(fù)一維數(shù)組3行2列 print(np.tile(a, (3, 2))) a = np.arange(6).reshape((2, 3)) print(a) # 重復(fù)二維數(shù)組3次 print(np.tile(a, 3)) # 重復(fù)二維數(shù)組2行3列 print(np.tile(a, (2, 3)))
6. 網(wǎng)格構(gòu)造法
用數(shù)組表示經(jīng)緯度網(wǎng)格方式一:用兩個(gè)一維數(shù)組表示。使用定長(zhǎng)分隔函數(shù)linspace()
,將經(jīng)度從-180°
到180°
分為間隔為10°
的37個(gè)點(diǎn),將緯度從90°
到-90
分為間隔為10°
的19個(gè)點(diǎn),得到兩個(gè)一維數(shù)組
import numpy as np # 精度為10°,共計(jì)37個(gè)經(jīng)度點(diǎn) lon = np.linspace(-180, 180, 37) # 精度為10°,共計(jì)19個(gè)緯度點(diǎn) lat = np.linspace(90, -90, 19)
用數(shù)組表示經(jīng)緯度網(wǎng)格方式二:用兩個(gè)二維數(shù)組分別表示經(jīng)度網(wǎng)格和緯度網(wǎng)格。經(jīng)度網(wǎng)格中每一列的元素都是相同的(同一個(gè)經(jīng)度),緯度網(wǎng)格中每一行的元素都是相同的(同一個(gè)緯度)。生成二維經(jīng)緯度網(wǎng)格的常用函數(shù)是np.meshgrid()
,該函數(shù)以一維經(jīng)度數(shù)組lon和一維緯度數(shù)組lat為參數(shù),返回二維的經(jīng)度數(shù)組和緯度數(shù)組
import numpy as np # 精度為10°,共計(jì)37個(gè)經(jīng)度點(diǎn) lon = np.linspace(-180, 180, 37) # 精度為10°,共計(jì)19個(gè)緯度點(diǎn) lat = np.linspace(90, -90, 19) lons, lats = np.meshgrid(lon, lat) print(lons.shape) print(lats.shape) print(lons[:,0]) print(lons[0])
構(gòu)造經(jīng)緯度網(wǎng)格,除了使用np.meshgrid()
函數(shù)外,還有一個(gè)更強(qiáng)大的方法,這個(gè)方法可以直接生成緯度網(wǎng)格和經(jīng)度網(wǎng)格而無(wú)需借助于一維數(shù)組(請(qǐng)注意,緯度在前,經(jīng)度在后)
import numpy as np # 使用實(shí)數(shù)指定網(wǎng)格經(jīng)度為5° lats, lons = np.mgrid[90:-91:-5, -180:181:5] print(lons.shape, lats.shape) # 也可以用虛數(shù)指定分隔點(diǎn)數(shù) lats, lons = np.mgrid[90:-90:37j, -180:180:73j] print(lons.shape, lats.shape)
7. 自定義數(shù)據(jù)類型
結(jié)果顯示:數(shù)組會(huì)將所有元素的數(shù)據(jù)類型都轉(zhuǎn)為'<U32'
類型。這里的U標(biāo)識(shí)Unicode字符串;<
表示字節(jié)順序,意為小端在前(低位字節(jié)存儲(chǔ)在最小地址中);32表示數(shù)組元素占用32字節(jié),數(shù)組元素占用的字節(jié)數(shù)由所有元素中最長(zhǎng)的那個(gè)元素決定
import numpy as np print(np.array(['Anne', 1.70, 55]).dtype)
怎樣在數(shù)組中保留用以生成數(shù)組的列表中的元素類型呢?這就需要用到自定義數(shù)據(jù)類型了。自定義數(shù)據(jù)類型類似于C語(yǔ)言的結(jié)構(gòu)體,
其代碼如下:
import numpy as np mytype = np.dtype([('name', 'S32'), ('tall', np.float), ('bw', np.int)]) print(np.array([('Anne', 1.70, 55)], dtype=mytype))
相關(guān)文章
成功解決ValueError:?Supported?target?types?are:('binary
本文給大家分享成功解決ValueError:?Supported?target?types?are:('binary',?'multiclass').?Got?'continuous'?instead.的錯(cuò)誤問(wèn)題,需要的朋友可以參考下2023-03-03Linux RedHat下安裝Python2.7開發(fā)環(huán)境
這篇文章主要為大家詳細(xì)介紹了Linux RedHat下安裝Python2.7、pip、ipython環(huán)境、eclipse和PyDev環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Pandas常用累計(jì)、同比、環(huán)比等統(tǒng)計(jì)方法實(shí)踐過(guò)程
這篇文章主要介紹了Pandas常用累計(jì)、同比、環(huán)比等統(tǒng)計(jì)方法實(shí)踐過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05TensorFlow安裝及jupyter notebook配置方法
下面小編就為大家?guī)?lái)一篇TensorFlow安裝及jupyter notebook配置方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09python使用pygame框架實(shí)現(xiàn)推箱子游戲
這篇文章主要為大家詳細(xì)介紹了python使用pygame框架實(shí)現(xiàn)推箱子游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11python正則表達(dá)式中的括號(hào)匹配問(wèn)題
這篇文章主要介紹了python正則表達(dá)式中的括號(hào)匹配問(wèn)題,需要的朋友可以參考下2014-12-12Pygame實(shí)現(xiàn)監(jiān)聽鼠標(biāo)示例詳解
這篇文章主要介紹了通過(guò)Pygame模塊實(shí)現(xiàn)監(jiān)聽鼠標(biāo)的功能,文章的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的價(jià)值,感興趣的小伙伴可以了解一下2021-12-12