久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

我的Python筆記·NumPy入門(一)

 微笑如酒 2018-07-09

簡(jiǎn)介

NumPy(Numerical Python)是 Python 中的一個(gè)線性代數(shù)庫(kù),。對(duì)每一個(gè)數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí) Python 包而言,,這都是一個(gè)非常重要的庫(kù),,SciPy(Scientific Python),、Matplotlib(plotting library),、Scikit-learn 等都在一定程度上依賴 NumPy,。

如果已經(jīng)安裝了Anaconda,,那么你已經(jīng)可以使用NumPy;也可以按照NumPy的官方網(wǎng)站(www.numpy.org)的教程進(jìn)行安裝,。

導(dǎo)入NumPy

按照傳統(tǒng),,通常用np作為別名來(lái)導(dǎo)入NumPy

import numpy as np

從Python列表創(chuàng)建數(shù)組

可以用np.array從Python列表創(chuàng)建數(shù)組:

# 整型數(shù)組:
np.array([14253])
array([14253])

NumPy要求數(shù)組必須包含同一類型的數(shù)據(jù),如果不匹配則會(huì)向上轉(zhuǎn)換,。比如整型會(huì)變成浮點(diǎn)型:

np.array([3.14423])
array([3.144.  , 2.  , 3.  ])

可以用dtype關(guān)鍵字來(lái)設(shè)置數(shù)值類型:

np.array([1234], dtype='float32')
array([1.2.3.4.], dtype=float32)

NumPy數(shù)組也可以被指定為多維:

np.array([range(i , i+3for i in [246]])
array([[2, 3, 4],
       [4, 5, 6],
       [6, 7, 8]]
)

從頭創(chuàng)建數(shù)組

NumPy有許多內(nèi)置的方法從頭創(chuàng)建數(shù)組,,以下是幾個(gè)示例:

# 創(chuàng)建一個(gè)值都為0,長(zhǎng)度為10的數(shù)組
np.zeros(10, dtype=int)
array([0000000000])
# 創(chuàng)建一個(gè)值都為1,,3*5的浮點(diǎn)型數(shù)組
np.ones((35),dtype=float)
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]]
)
# 創(chuàng)建一個(gè)值都為3.14,,3*5的浮點(diǎn)型數(shù)組
np.full((35), 3.14)
array([[3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14]]
)
# 創(chuàng)建一個(gè)值為線性序列,從0到20,,步長(zhǎng)為2的數(shù)組
np.arange(0202)
array([ 0,  2,  4,  6,  81012141618])
# 創(chuàng)建一個(gè)有5個(gè)元素的數(shù)組,,且這5個(gè)數(shù)均勻分配到0~1
np.linspace(015)
array([0.  , 0.250.5 , 0.751.  ])
# 創(chuàng)建一個(gè)3*3的,在0~1均勻分布的隨機(jī)數(shù)組成的數(shù)組
np.random.random((33))
array([[0.36709154, 0.97609935, 0.53257059],
       [0.98030801, 0.75542908, 0.41482827],
       [0.91319197, 0.37346273, 0.55469639]]
)
# 創(chuàng)建一個(gè)3*3的,,均值為0,,方差為1的正態(tài)分布的隨機(jī)數(shù)數(shù)組
np.random.normal(01, (33))
array([[-0.01152638,  0.88988951, -0.21171668],
       [ 0.08373947, -2.41123452,  0.50703231],
       [ 1.98705654, -1.61103069, -0.97971459]]
)
# 創(chuàng)建一個(gè)3*3的、`[0, 10)`區(qū)間的隨機(jī)整型數(shù)組
np.random.randint(010, (33))
array([[6, 3, 8],
       [8, 8, 0],
       [1, 2, 1]]
)
# 創(chuàng)建一個(gè)由3個(gè)整型數(shù)組成的未初始化的數(shù)組
# 數(shù)組的值是內(nèi)存空間中的任意值
np.empty(3)
array([9.80485013e-3120.00000000e+0009.76154329e-313])

NumPy標(biāo)準(zhǔn)數(shù)據(jù)類型

NumPy數(shù)組包含同一類型的值,所以了解下這些數(shù)據(jù)類型是十分必要的:

Data typeDescription
bool_Boolean (True or False) stored as a byte
int_Default integer type (same as C long; normally either int64 or int32)
intcIdentical to C int (normally int32 or int64)
intpInteger used for indexing (same as C ssize_t; normally either int32 or int64)
int8Byte (-128 to 127)
int16Integer (-32768 to 32767)
int32Integer (-2147483648 to 2147483647)
int64Integer (-9223372036854775808 to 9223372036854775807)
uint8Unsigned integer (0 to 255)
uint16Unsigned integer (0 to 65535)
uint32Unsigned integer (0 to 4294967295)
uint64Unsigned integer (0 to 18446744073709551615)
float_Shorthand for float64.
float16Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
float32Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
float64Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
complex_Shorthand for complex128.
complex64Complex number, represented by two 32-bit floats
complex128Complex number, represented by two 64-bit floats

NumPy數(shù)組的屬性

介紹一些有用的數(shù)組屬性,。首先用NumPy的隨機(jī)數(shù)生成器設(shè)置一組種子值,,確保每次程序運(yùn)行時(shí)可以生成相同的隨機(jī)數(shù)組,再定義三個(gè)隨機(jī)數(shù)組:一個(gè)一維數(shù)組,、一個(gè)二維數(shù)組和一個(gè)三維數(shù)組,。

np.random.seed(0# 設(shè)置種子

x1 = np.random.randint(10, size=6)
x2 = np.random.randint(10, size=(34))
x3 = np.random.randint(10, size=(345))

每個(gè)數(shù)組有ndim數(shù)組的維度、shape數(shù)組每個(gè)維度的大小,、size數(shù)組的總大小屬性和dtype數(shù)組的數(shù)據(jù)類型屬性:

print('x3 ndim: ', x3.ndim)
print('x3 shape:', x3.shape)
print('x3 size: ', x3.size)
print('dtype:', x3.dtype)
x3 ndim:  3
x3 shape: (3, 4, 5)
x3 size:  60
dtype: int32

其他屬性包括數(shù)組元素的字節(jié)大小itemsize以及數(shù)組總字節(jié)大小nbytes

print('itemsize:', x3.itemsize, 'bytes')
print('nbytes:', x3.nbytes, 'bytes')
itemsize: 4 bytes
nbytes: 240 bytes

數(shù)組索引:獲取單個(gè)元素

和Python列表一樣,,對(duì)于NumPy數(shù)組你也可以通過(guò)中括號(hào)來(lái)進(jìn)行索引(從0開(kāi)始計(jì)數(shù)):

x1
array([503379])
x1[0]
5
x1[4]
7

同樣可以用負(fù)值來(lái)進(jìn)行末尾索引:

x1[-1]
9

在多維數(shù)組中,用逗號(hào)分隔的索引元組獲取元素:

x2
array([[3, 5, 2, 4],
       [7, 6, 8, 8],
       [1, 6, 7, 7]]
)
x2[00]
3
x2[2-1]
7

也可以用以上索引方式修改元素值:

x2[00] = 12
x2
array([[12,  5,  2,  4],
       [ 7,  6,  8,  8],
       [ 1,  6,  7,  7]]
)

注意,,NumPy數(shù)組是固定類型的,,如果把一個(gè)浮點(diǎn)值插入一個(gè)整型數(shù)組時(shí),浮點(diǎn)數(shù)會(huì)截短變?yōu)檎汀?/p>

x1[0] = 3.14159
x1
array([303379])

數(shù)組切片:獲取子數(shù)組

為了獲取數(shù)組x的切片,,可以用以下方式:x[start:stop:step],。

一維子數(shù)組

x = np.arange(10)
x
array([0123456789])
x[:5# 前5個(gè)元素
array([01234])
x[4:7# 中間的子數(shù)組
array([456])
x[::2# 每隔一個(gè)元素取
array([02468])
x[1::2# 每隔一個(gè)元素取,從索引1開(kāi)始
array([13579])

當(dāng)步長(zhǎng)值為負(fù)時(shí),,startstop參數(shù)是被交換的,,所以這可以很方便地將數(shù)組逆序排列:

x[::-1# 逆序排列
array([9876543210])
x[5::-2# 從索引5開(kāi)始每隔一個(gè)元素逆序
array([531])

多維子數(shù)組

x2
array([[12,  5,  2,  4],
       [ 7,  6,  8,  8],
       [ 1,  6,  7,  7]]
)
x2[:2, :3# 兩行三列
array([[12,  5,  2],
       [ 7,  6,  8]]
)
x2[:3, ::2# 所有行,每隔一列
array([[12,  2],
       [ 7,  8],
       [ 1,  7]]
)
x2[::-1, ::-1# 逆序
array([[ 7,  7,  6,  1],
       [ 8,  8,  6,  7],
       [ 4,  2,  5, 12]]
)

獲取數(shù)組的行和列

print(x2[:, 0]) # x2的第一列
[12  7  1]
print(x2[0,:]) # x2的第一行
[12  5  2  4]

在獲取行時(shí)也可以:

print(x2[0])
[12  5  2  4]

非副本視圖的子數(shù)組

數(shù)組切片返回的是數(shù)組數(shù)據(jù)的視圖,,而不是數(shù)組數(shù)據(jù)的副本,。

print(x2)
[[12  5  2  4]
 [ 7  6  8  8]
 [ 1  6  7  7]]

從中抽取一個(gè)2*2的子數(shù)組:

x2_sub = x2[:2, :2]
print(x2_sub)
[[12  5]
 [ 7  6]]

如果修改這個(gè)子數(shù)組,原始數(shù)組也會(huì)被改變:

x2_sub[00] = 99
print(x2_sub)
[[99  5]
 [ 7  6]]
print(x2)
[[99  5  2  4]
 [ 7  6  8  8]
 [ 1  6  7  7]]

這種特性意味著,,當(dāng)我們處理非常大的數(shù)據(jù)集時(shí),,可以直接獲取這些數(shù)據(jù)的片段進(jìn)行處理。

創(chuàng)建數(shù)組的副本

有時(shí)候我們也想明確地復(fù)制數(shù)組里的數(shù)據(jù)或子數(shù)據(jù),,這時(shí)候可以使用copy()方法實(shí)現(xiàn):

x2_sub_copy = x2[:2, :2].copy()
print(x2_sub_copy)
[[99  5]
 [ 7  6]]

如果修改這個(gè)數(shù)組,,原始的數(shù)組不會(huì)被改變:

x2_sub_copy[00] = 42
print(x2_sub_copy)
[[42  5]
 [ 7  6]]
print(x2)
[[99  5  2  4]
 [ 7  6  8  8]
 [ 1  6  7  7]]

數(shù)組的變形

使用reshape()方法進(jìn)行變形,例如你希望將數(shù)字1~9放入一個(gè)3*3的矩陣中:

grid = np.arange(110).reshape((33))
print(grid)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

注意,,原始數(shù)組的大小必須和變形后數(shù)組的大小一致,。你也可以通過(guò)reshape()將一個(gè)一維數(shù)組變?yōu)槎S的行或列的矩陣:

x = np.array([123])

# 通過(guò)變形獲得的行向量
x.reshape((13))
array([[1, 2, 3]])

也可以通過(guò)newaxis來(lái)進(jìn)行相同的操作:

# 通過(guò)newaxis獲得的行向量
x[np.newaxis, :]
array([[1, 2, 3]])
# 通過(guò)變形獲得的列向量
x.reshape((31))
array([[1],
       [2],
       [3]]
)
# 通過(guò)newaxis獲得的列向量
x[:, np.newaxis]
array([[1],
       [2],
       [3]]
)

數(shù)組的拼接和分裂

以上操作都是針對(duì)單一數(shù)組的,有時(shí)候我們也需要把多個(gè)數(shù)組成為一個(gè),,或?qū)⒁粋€(gè)數(shù)組拆分成多個(gè),。

數(shù)組的拼接

x = np.array([123])
y = np.array([321])
np.concatenate([x, y])
array([123321])

也可以一次性拼接兩個(gè)以上數(shù)組:

z = [999999]
np.concatenate([x, y, z])
array([ 1,  2,  3,  3,  2,  1999999])

np.concatenate也可以用于二維數(shù)組的拼接:

grid = np.arange(1,7).reshape((23))
grid
array([[1, 2, 3],
       [4, 5, 6]]
)
# 沿著第一個(gè)軸拼接
np.concatenate([grid, grid])
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]]
)
# 沿著第二個(gè)軸拼接(從0開(kāi)始索引)
np.concatenate([grid, grid], axis=1)
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]]
)

沿著固定維度處理初級(jí)使用np.vstack(垂直)和np.hstack(水平)會(huì)更簡(jiǎn)潔:

x = np.array([123])
grid = np.array([[987],
                 [654]])

# 垂直拼接數(shù)據(jù)
np.vstack([x, grid])
array([[1, 2, 3],
       [9, 8, 7],
       [6, 5, 4]]
)
# 水平拼接數(shù)據(jù)
y = np.array([[99],
              [99]])
np.hstack([grid, y])
array([[ 9,  8,  7, 99],
       [ 6,  5,  4, 99]]
)

數(shù)組的分裂

同樣,分裂可以通過(guò)np.split,、np.hsplitnp.vsplit來(lái)實(shí)現(xiàn),,參數(shù)為數(shù)組和分裂點(diǎn)的位置索引:

x = [1239999321]
x1, x2, x3 = np.split(x, [35])
print(x1, x2, x3)
[1 2 3] [99 99] [3 2 1]

np.hsplitnp.vsplit的用法也類似:

grid = np.arange(16).reshape((44))
grid
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]]
)
upper, lower = np.vsplit(grid, [2])
print(upper)
print(lower)
[[0 1 2 3]
 [4 5 6 7]]
[[ 8  9 10 11]
 [12 13 14 15]]
left, right = np.hsplit(grid, [2])
print(left)
print(right)
[[ 0  1]
 [ 4  5]
 [ 8  9]
 [12 13]]
[[ 2  3]
 [ 6  7]
 [10 11]
 [14 15]]

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多