? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作者丨琳兒
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 來源丨醫(yī)數(shù)思維云課堂(ID:Datamedi)? ?
01?基本功能
快速高效的多維數(shù)組對(duì)象ndarray。
用于對(duì)數(shù)組執(zhí)行元素級(jí)計(jì)算以及直接對(duì)數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算的函數(shù)
用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具
線性代數(shù)運(yùn)算、傅里葉變換,以及隨機(jī)數(shù)生成
用于將C、C++、Fortran代碼集成到Python的工具
除了為Python提供快速的數(shù)組處理能力,NumPy在數(shù)據(jù)分析方面還有另外一個(gè)主要作用,即作為在算法之間傳遞數(shù)據(jù)的容器。
標(biāo)準(zhǔn)Python的列表(list)中,元素本質(zhì)是對(duì)象。如:L?=?[1,?2,?3],需要3個(gè)指針和三個(gè)整數(shù)對(duì)象,對(duì)于數(shù)值運(yùn)算比較浪費(fèi)內(nèi)存和CPU。
因此,Numpy提供了ndarray(N-dimensional?array?object)對(duì)象:存儲(chǔ)單一數(shù)據(jù)類型的多維數(shù)組。
02?基礎(chǔ)知識(shí)
1.NumPy 數(shù)組
(1)?使用NumPy中的arange()函數(shù)來創(chuàng)建包含0~n?的整數(shù)的NumPy數(shù)組。
代碼中的arange函數(shù)前面有一個(gè)前綴numpy,表明該函數(shù)是從NumPy模塊導(dǎo)入的。
test_1=np.arange(5)
print(test_1)
(2)?NumPy數(shù)組的下標(biāo)從0開始的。使用dtype()獲得數(shù)據(jù)類型
print(test_1.dtype)
(3)?數(shù)組的shape屬性返回一個(gè)元組(tuple),元組中的元素即為NumPy數(shù)組每一個(gè)維度上的大小。上面例子中的數(shù)組是一維的,因此元組中只有一個(gè)元素。
print(test_1.shape)
(4) 創(chuàng)建指定長(zhǎng)度的全0數(shù)組(zeros),全1數(shù)組(ones),沒有任何具體數(shù)值的數(shù)組(empty),創(chuàng)建單位矩陣eye()
print(np.zeros(3))
print(np.ones([2,3]))
print(np.empty([3,3],dtype=int))
print(np.eye(3,3))
參數(shù):
shape?:?整數(shù)或者整型元組定義返回?cái)?shù)組的形狀;
dtype?:?數(shù)據(jù)類型,可選定義返回?cái)?shù)組的類型。
order?:?{'C',?'F'},?可選規(guī)定返回?cái)?shù)組元素在內(nèi)存的存儲(chǔ)順序:C(C語言)-rowmajor;F(Fortran)column-major。
2.創(chuàng)建多維數(shù)組
(1)創(chuàng)建一個(gè)多維數(shù)組;?顯示該數(shù)組的維度。
arange函數(shù)創(chuàng)建的數(shù)組作為列表元素,把這個(gè)列表作為參數(shù)傳給array()函數(shù),從而創(chuàng)建了一個(gè)2×2的數(shù)組。
test_2=np.array([np.arange(2), np.arange(2)])
print(test_2)
print(test_2.shape)
(2)選取數(shù)組元素:對(duì)于數(shù)組a,只需要用a[m,n]選取各數(shù)組元素,其中m和n為元素下標(biāo),對(duì)應(yīng)的位置如下表所示。
a=np.array([[1,2], [3,4]])
print(a)
print(a[0,0])
print(a[0,1])
3.NumPy 數(shù)據(jù)類型
Python支持的數(shù)據(jù)類型有整型、浮點(diǎn)型以及復(fù)數(shù)型,但這些類型不足以滿足科學(xué)計(jì)算的需求,因此NumPy添加了很多其他的數(shù)據(jù)類型。
在實(shí)際應(yīng)用中,我們需要不同精度的數(shù)據(jù)類型,它們占用的內(nèi)存空間也是不同的。
在NumPy中,大部分?jǐn)?shù)據(jù)類型名是以數(shù)字結(jié)尾的,這個(gè)數(shù)字表示其在內(nèi)存中占用的位數(shù)。下面的表格(整理自NumPy用戶手冊(cè))列出了NumPy中支持的數(shù)據(jù)類型。
(1)每一種數(shù)據(jù)類型均有對(duì)應(yīng)的類型轉(zhuǎn)換函數(shù):
float64(42)
int8(42.0)
bool(42)
bool(0)
bool(42.0)
float(False)
float(True)
print(np.float64(42))
print(np.int8(42.0))
print(bool(42))
(2)在NumPy中,許多函數(shù)的參數(shù)中可以指定數(shù)據(jù)類型,通常這個(gè)參數(shù)是可選的:
(3)復(fù)數(shù)是不能轉(zhuǎn)換為整數(shù)的
np.complex(2,1)
np.int8(np.complex(2,1))
4.數(shù)據(jù)類型對(duì)象
(1)數(shù)據(jù)類型對(duì)象是numpy.dtype類的實(shí)例。如前所述,NumPy數(shù)組是有數(shù)據(jù)類的,更確切地說,NumPy數(shù)組中的每一個(gè)元素均為相同的數(shù)據(jù)類型。
數(shù)據(jù)類型對(duì)象可以給出單個(gè)數(shù)組元素在內(nèi)存中占用的字節(jié)數(shù),即dtype類的itemsize屬性:a.dtype.itemsize。
(2)NumPy可以使用字符編碼來表示數(shù)據(jù)類型,這是為了兼容NumPy的前身Numeric。
應(yīng)該優(yōu)先使用dtype對(duì)象來表示數(shù)據(jù)類型,而不是這些字符編碼。
np.arange(7, dtype='f')
np.arange(7, dtype='D')
(3)完整的NumPy數(shù)據(jù)類型列表可以在sctypeDict.keys()中找到。
(4)獲取數(shù)據(jù)類型的字符編碼:
t = np.dtype('Float64')
t.char
(5)創(chuàng)建自定義數(shù)據(jù)類型:
自定義數(shù)據(jù)類型是一種異構(gòu)數(shù)據(jù)類型,可以當(dāng)做用來記錄電子表格或數(shù)據(jù)庫中一行數(shù)據(jù)的結(jié)構(gòu)。
作為示例,我們將創(chuàng)建一個(gè)存儲(chǔ)商店庫存信息的數(shù)據(jù)類型。
其中,我們用一個(gè)長(zhǎng)度為40個(gè)字符的字符串來記錄商品名稱,用一個(gè)32位的整數(shù)來記錄商品的庫存數(shù)量,最后用一個(gè)32位的單精度浮點(diǎn)數(shù)來記錄商品價(jià)格。
下面是具體的步驟。
t = np.dtype([('name', np.str),('numitems', np.int32),('price',np.float32)])
print(t)
t['name']
Python學(xué)習(xí)之Numpy的內(nèi)容就講到這里,期待我們的再次相約。