array
方法創(chuàng)建一維或多維數(shù)組嫩絮,參數(shù)只能有一個藻治,可以是列表、range垄潮、元組
不管是一維還是多維,數(shù)據(jù)類型都是 numpy.ndarray (多維數(shù)組):
In [11]: a = np.array(list(range(9)))
In [12]: a
Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [13]: a = np.array(range(9))
In [14]: a
Out[14]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [15]: a = np.array(tuple(range(9)))
In [16]: a
Out[16]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [17]: a = np.array([list('abcd'), list(range(1,5)), list('MNOP')])
In [18]: a
Out[18]:
array([['a', 'b', 'c', 'd'],
['1', '2', '3', '4'],
['M', 'N', 'O', 'P']], dtype='<U1')
In [19]: type(a)
Out[19]: numpy.ndarray
np.ones 創(chuàng)建元素值全部為 1 的數(shù)組
np.zeros 創(chuàng)建元素值全為 0 的數(shù)組
np.empty 創(chuàng)建空值多維數(shù)組,只分配內(nèi)存弯洗,不填充任何值
以上方法的參數(shù)也只能有一個旅急,方法的返回值的數(shù)據(jù)類型是 numpy.ndarray :
In [63]: np.ones(8)
Out[63]: array([1., 1., 1., 1., 1., 1., 1., 1.])
In [64]: np.zeros(8)
Out[64]: array([0., 0., 0., 0., 0., 0., 0., 0.])
In [65]: np.empty(8)
Out[65]: array([0., 0., 0., 0., 0., 0., 0., 0.])
In [66]: np.empty(8) == np.zeros(8)
Out[66]: array([ True, True, True, True, True, True, True, True])
In [74]: np.ones((3,4))
Out[74]:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
In [75]: type(np.ones((3,4)))
Out[75]: numpy.ndarray
arange
的用法同 Python 中的 range :
In [85]: a = np.arange(3,9)
In [86]: a
Out[86]: array([3, 4, 5, 6, 7, 8])
In [87]: a = np.arange(9)
In [88]: a
Out[88]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
多維數(shù)組的一些屬性:
In [89]: a = np.ones((2,3,4))
In [90]: a
Out[90]:
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.]]])
In [91]: a.shape # 形狀,2 組 3 行 4 列
Out[91]: (2, 3, 4)
In [92]: a.ndim # 維度
Out[92]: 3
In [93]: a.size # 元素總數(shù)
Out[93]: 24
In [94]: a.mean() # 平均值
Out[94]: 1.0
In [95]: a.dtype # 元素的數(shù)據(jù)類型
Out[95]: dtype('float64')
numpy.ndarray 數(shù)據(jù)可以通過 reshape
方法變形:
In [96]: a = np.arange(12)
In [97]: a
Out[97]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [98]: a.reshape(3,4)
Out[98]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [99]: a
Out[99]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
多維數(shù)組相乘牡整,用 dot
方法按照矩陣的規(guī)則:
In [115]: a = np.arange(1,5).reshape(2,2)
In [116]: b = np.arange(5,9).reshape(2,2)
In [117]: a
Out[117]:
array([[1, 2],
[3, 4]])
In [118]: b
Out[118]:
array([[5, 6],
[7, 8]])
In [119]: a * b
Out[119]:
array([[ 5, 12],
[21, 32]])
In [120]: a.dot(b)
Out[120]:
array([[19, 22],
[43, 50]])
# 19 = 1*5 + 2*7
# 22 = 1*6 + 2*8
# 43 = 3*5 + 4*7
# 50 = 3*6 + 4*8
random
用于定義元素值為隨機數(shù)的多維數(shù)組藐吮,常見的使用:
# randint 方法生成一個 [0, 3) 之間的整數(shù)(只給一個參數(shù),另一個參數(shù)則默認為 0)
In [131]: for i in range(9):
...: print(np.random.randint(3))
...:
0
1
1
1
0
1
2
1
2
# randint 生成 [-2, 4) 之間的整數(shù)
In [132]: for i in range(9):
...: print(np.random.randint(-2, 4))
...:
-1
-1
-2
3
3
2
-2
-1
1
In [12]: np.random.randint(1, 3,(3, 4)) # 第三個參數(shù)定義 shape
Out[12]:
array([[2, 1, 1, 1],
[1, 1, 1, 2],
[1, 1, 1, 2]])
In [18]: np.random.randint(0, 3, 5)
Out[18]: array([2, 1, 2, 1, 0])
# rand 方法根據(jù)給定 shape 生成值為 [0, 1) 之間的數(shù)據(jù)
In [19]: np.random.rand()
Out[19]: 0.7651785443614785
In [20]: np.random.rand(2)
Out[20]: array([0.10671066, 0.79280396])
In [21]: np.random.rand(2, 3)
Out[21]:
array([[0.47940471, 0.11098761, 0.85766535],
[0.33916207, 0.3491621 , 0.33013207]])
# 正態(tài)分布 -- normal distribution
# 正態(tài)分布又稱高斯分布果正,是連續(xù)隨機變量概率分布的一種炎码,有均值和標準差兩個屬性
# 正態(tài)分布的特點:曲線為軸對稱圖形,曲線下面的面積為 1
# normal 創(chuàng)建符合 ”正態(tài)分布“ 的數(shù)組秋泳,下面的 randn 是它的特殊形態(tài)
# 均值為 1,標準差為 2攒菠,數(shù)量為 15迫皱,符合正態(tài)分布的一維數(shù)組
In [134]: np.random.normal(1, 2, 15)
Out[134]:
array([ 0.80615746, -0.26899861, -0.74888346, 4.53490444, 1.37697208,
-0.55673608, 0.40559978, 0.7658986 , 0.24568999, -0.2934424 ,
2.26390635, -1.27112171, 3.3586831 , 1.41351671, 0.17504285])
# 均值為 1,標準差為 2辖众,三行五列的二維數(shù)組
In [135]: np.random.normal(1, 2, (3, 5))
Out[135]:
array([[-2.27388178, 1.96749003, 1.15758907, 1.6039605 , 3.43645324],
[ 2.20140634, -1.0816135 , 1.73925819, 3.18562444, 1.31227349],
[-1.20275991, 1.14247008, -2.03774236, -1.25580262, 1.68002098]])
# 標準正態(tài)分布 -- standard normal distribution
# 標準正態(tài)分布就是一種特殊的卓起、以 0 為均值、以 1 為標準差的正態(tài)分布凹炸,記為 N(0戏阅,1)
# randn 方法返回一組符合 “標準正態(tài)分布” 的隨機樣本
In [136]: np.random.randn(2, 3)
Out[136]:
array([[ 2.28233846, 0.88622313, -0.21362108],
[ 0.16395558, 0.0607688 , 1.14653666]])
# seed 方法可以錨定某一次隨機數(shù)
# 一次錨定,永久有效啤它,不可更改
# 注意參數(shù)限制:Seed must be between 0 and 2**32 - 1
In [137]: np.random.seed(1) # 下面的隨機數(shù)就被錨定了
In [138]: np.random.randn(2,3) # 這是被錨定的數(shù)組
Out[138]:
array([[ 1.62434536, -0.61175641, -0.52817175],
[-1.07296862, 0.86540763, -2.3015387 ]])
In [139]: np.random.randn(2,3) # 這個是未被錨定的數(shù)組
Out[139]:
array([[ 1.74481176, -0.7612069 , 0.3190391 ],
[-0.24937038, 1.46210794, -2.06014071]])
In [140]: np.random.randn(2,3) # 這個也是未被錨定的數(shù)組
Out[140]:
array([[-0.3224172 , -0.38405435, 1.13376944],
[-1.09989127, -0.17242821, -0.87785842]])
In [141]: np.random.seed(1) # 要想獲取上面被錨定的那個奕筐,就先寫這一行
In [142]: np.random.randn(2,3) # 獲得上面被錨定的數(shù)組
Out[142]:
array([[ 1.62434536, -0.61175641, -0.52817175],
[-1.07296862, 0.86540763, -2.3015387 ]])
around
和 round
處理小數(shù)
它倆的功能是完全一樣的,round 會調(diào)用 around 來實現(xiàn):
In [104]: a = np.random.rand(9) * 10
In [105]: a
Out[105]:
array([5.61645392, 6.08375342, 6.54287893, 9.11241186, 7.98373947,
3.99255352, 8.40064373, 0.52359344, 1.2900161 ])
In [106]: np.around(a) # 四舍五入取整數(shù)变骡,但結果為 float 類型
Out[106]: array([6., 6., 7., 9., 8., 4., 8., 1., 1.])
In [107]: type(np.around(a)[1])
Out[107]: numpy.float64
In [108]: np.around(a).tolist() # 轉(zhuǎn)換成列表
Out[108]: [6.0, 6.0, 7.0, 9.0, 8.0, 4.0, 8.0, 1.0, 1.0]
# round 方法保留幾位小數(shù)离赫,第二個參數(shù)為小數(shù)位數(shù),若結尾為 0 即舍棄 0
In [109]: np.round(a, 3)
Out[109]: array([5.616, 6.084, 6.543, 9.112, 7.984,
3.993, 8.401, 0.524, 1.29 ])
In [110]: np.around(3.33)
Out[110]: 3.0
In [111]: np.round(3.33, 3)
Out[111]: 3.33
In [112]: np.round(3.33333, 3)
Out[112]: 3.333
cumsum
累加塌碌,對任何多維數(shù)組均有效:
In [3]: a = np.random.rand(10)
In [4]: a
Out[4]:
array([0.7520204 , 0.2567527 , 0.9816239 , 0.33018876, 0.78744841,
0.54783023, 0.68264491, 0.49180885, 0.77609804, 0.69531601])
In [5]: a.cumsum() # 第 n 個元素的值為前 n 個元素的值的和
Out[5]:
array([0.7520204 , 1.00877309, 1.99039699, 2.32058575, 3.10803416,
3.6558644 , 4.3385093 , 4.83031816, 5.6064162 , 6.30173221])
In [6]: np.cumsum(a) # 同上
Out[6]:
array([0.7520204 , 1.00877309, 1.99039699, 2.32058575, 3.10803416,
3.6558644 , 4.3385093 , 4.83031816, 5.6064162 , 6.30173221])
In [9]: a = np.random.rand(3,4)
In [10]: a
Out[10]:
array([[0.4454985 , 0.56523565, 0.79940169, 0.65121062],
[0.17480848, 0.96010804, 0.95316188, 0.95932027],
[0.20944227, 0.66267168, 0.71068392, 0.31114727]])
In [11]: a.cumsum() # 對于多維數(shù)組渊胸,默認是先從左到右再從上到下累加,不分組
Out[11]:
array([0.4454985 , 1.01073415, 1.81013584, 2.46134646, 2.63615495,
3.59626299, 4.54942487, 5.50874514, 5.7181874 , 6.38085908,
7.091543 , 7.40269027])
In [12]: a.cumsum(axis=0) # 以列分組台妆,從上到下累加
Out[12]:
array([[0.4454985 , 0.56523565, 0.79940169, 0.65121062],
[0.62030699, 1.52534369, 1.75256357, 1.61053089],
[0.82974925, 2.18801537, 2.46324749, 1.92167816]])
In [13]: a.cumsum(axis=1) # 以行分組翎猛,從左到右累加
Out[13]:
array([[0.4454985 , 1.01073415, 1.81013584, 2.46134646],
[0.17480848, 1.13491653, 2.08807841, 3.04739867],
[0.20944227, 0.87211395, 1.58279787, 1.89394514]])
In [14]: np.cumsum(a, axis=1) # 同上
Out[14]:
array([[0.4454985 , 1.01073415, 1.81013584, 2.46134646],
[0.17480848, 1.13491653, 2.08807841, 3.04739867],
[0.20944227, 0.87211395, 1.58279787, 1.89394514]])
linspace
創(chuàng)建等差數(shù)列的一維數(shù)組:
In [21]: np.linspace(1, 20) # 前兩個參數(shù)分別為起止數(shù),左閉右閉接剩,默認創(chuàng)建 50 個元素
Out[21]:
array([ 1. , 1.3877551 , 1.7755102 , 2.16326531, 2.55102041,
2.93877551, 3.32653061, 3.71428571, 4.10204082, 4.48979592,
4.87755102, 5.26530612, 5.65306122, 6.04081633, 6.42857143,
6.81632653, 7.20408163, 7.59183673, 7.97959184, 8.36734694,
8.75510204, 9.14285714, 9.53061224, 9.91836735, 10.30612245,
10.69387755, 11.08163265, 11.46938776, 11.85714286, 12.24489796,
12.63265306, 13.02040816, 13.40816327, 13.79591837, 14.18367347,
14.57142857, 14.95918367, 15.34693878, 15.73469388, 16.12244898,
16.51020408, 16.89795918, 17.28571429, 17.67346939, 18.06122449,
18.44897959, 18.83673469, 19.2244898 , 19.6122449 , 20. ])
In [22]: np.linspace(1, 20, 20) # 第三個參數(shù)設置元素數(shù)量
Out[22]:
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19., 20.])
In [23]: np.linspace(1, 20, 30)
Out[23]:
array([ 1. , 1.65517241, 2.31034483, 2.96551724, 3.62068966,
4.27586207, 4.93103448, 5.5862069 , 6.24137931, 6.89655172,
7.55172414, 8.20689655, 8.86206897, 9.51724138, 10.17241379,
10.82758621, 11.48275862, 12.13793103, 12.79310345, 13.44827586,
14.10344828, 14.75862069, 15.4137931 , 16.06896552, 16.72413793,
17.37931034, 18.03448276, 18.68965517, 19.34482759, 20. ])
concatenate
拼接數(shù)組:
In [4]: a = np.random.rand(5) * 100
In [5]: b = np.ones(3) * 10
In [6]: c = np.arange(1, 4) * -5
In [7]: a
Out[7]: array([41.59832138, 3.51696663, 4.36743242,
22.06651079, 47.40743768])
In [8]: b
Out[8]: array([10., 10., 10.])
In [9]: c
Out[9]: array([ -5, -10, -15])
# 拼接一維數(shù)組切厘,默認參數(shù) axis=0 可以不寫
In [10]: np.concatenate((a, b, c))
Out[10]:
array([ 41.59832138, 3.51696663, 4.36743242, 22.06651079,
47.40743768, 10. , 10. , 10. ,
-5. , -10. , -15. ])
In [11]: d = np.arange(1,7).reshape(2,3)
In [12]: e = np.arange(7, 13).reshape(2,3)
In [13]: d
Out[13]:
array([[1, 2, 3],
[4, 5, 6]])
In [14]: e
Out[14]:
array([[ 7, 8, 9],
[10, 11, 12]])
# 拼接二維數(shù)組,默認參數(shù) axis=0 搂漠,即縱向拼接
In [15]: np.concatenate((d, e))
Out[15]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
# axis=1 迂卢,橫向拼接
In [16]: np.concatenate((d, e), axis=1)
Out[16]:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])
In [18]: f
Out[18]:
array([[ 7, 8, 9],
[10, 11, 12]])
In [19]: g
Out[19]:
array([[13, 14],
[15, 16]])
# 像上面 f、g 這種情況,只能橫向拼接了而克,縱向會報錯:
In [20]: np.concatenate((f, g), axis=1)
Out[20]:
array([[ 7, 8, 9, 13, 14],
[10, 11, 12, 15, 16]])
In [21]: np.concatenate((f, g))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-d793fa5e247b> in <module>()
----> 1 np.concatenate((f, g))
ValueError: all the input array dimensions except for the concatenation...
.T
變形之術:
In [113]: a = np.arange(12).reshape(3, 4)
In [114]: a
Out[114]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [115]: a.T # 變形靶壮,縱橫互換
Out[115]:
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
In [117]: a.reshape(4, 3) # 先把所有數(shù)據(jù)排成一行,然后重新分組
Out[117]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])