數(shù)據(jù)分析之NumPy

NumPy

數(shù)組

NumPy的基本對象是同類型的多維數(shù)組

a = np.arange(20)

通過這個(gè)可以生成一個(gè)一維數(shù)組a,從0開始,步長為1,長度為20。

我們可以通過函數(shù)reshape重新構(gòu)造這個(gè)數(shù)組,例如構(gòu)造為一個(gè)4*5的二維數(shù)組,reshape的參數(shù)代表各個(gè)維度的大小,且按各維順序排列。

a = a.reshape(4,5)

#結(jié)果為
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

array同時(shí)還有一些函數(shù)可以查看相關(guān)屬性。

  • ndim 查看維度
  • shape 查看各維度大小
  • size 查看全部元素個(gè)位
  • dtype 查看元素類型

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

數(shù)組的創(chuàng)建可以通過轉(zhuǎn)換列表實(shí)現(xiàn),高維數(shù)組可通過轉(zhuǎn)換嵌套列表來實(shí)現(xiàn)。

raw = [0,1,2,3,4]
a = np.array(raw)
#####
raw = [[0,1,2,3,4],[5,6,7,8,9]]
b = np.array(raw)

一些特殊的數(shù)組有特別定制的命令生成,如4*5的全零矩陣。

d = (4,5)
np.zeros(d)
##結(jié)果為:
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

但是默認(rèn)生成的類型是浮點(diǎn)型,可以通過指定類型改為整型

d = (4,5)
np.ones(d,dtype=int)

[0,1)區(qū)間的隨機(jī)數(shù)數(shù)組

np.random.rand(5)

數(shù)組操作

數(shù)組中簡單的四則運(yùn)算已經(jīng)重載過了,都是基于數(shù)組元素的。

+=,-=,*=,、-= 操作符在NumPy中同樣支持。

  • 全部元素的和: a.sum()

  • 數(shù)組的最大值和最小值:a.max()/a.min()

  • 每一行的最大值:a.max(asis=1)

  • 每一列的最小值:a.ming(axis=0)

科學(xué)計(jì)算中大量使用到矩陣計(jì)算,NumPy同時(shí)提供了矩陣對象(matrix)

矩陣和數(shù)組的差別為:

  • 矩陣是二維的,而數(shù)組的可以是任意正整數(shù)維度
  • 矩陣的操作符進(jìn)行的是矩陣乘法,乘號左側(cè)的矩陣列和乘號右邊的矩陣行要相等,而在數(shù)組中操作符進(jìn)行的是每一個(gè)元素的對象相乘,乘號兩側(cè)的數(shù)組每一維大小需要一致。

數(shù)組可以通過asmatrix或者mat轉(zhuǎn)換為矩陣,或者直接生成。

a = np.arange(20).reshape(4,5)
a = np.asmatrix(a)

b = np.matrix('1.0,2.0,3.0,4.0')

數(shù)組元素的訪問

數(shù)組和矩陣元素的訪問可以通過下標(biāo)進(jìn)行

a = np.array([3.2,1.5],[2.5,4])
print(a[0][1])
print(a[0,1])

可以通過下標(biāo)訪問來修改數(shù)組元素的值

a[0][1] = 2.0

利用:可以訪問到某一維的全部數(shù)據(jù)

a:
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

例如取出矩陣中的第2和4列

print(a[:,[1,3]])

將第一列大于5的元素(10,15)對應(yīng)的第三列元素(12,17)取出來

a[:,2][a[;,0] > 5]

可以使用where函數(shù)查看特定值在數(shù)組中的位置

loc = np.where(a==11)
print(loc)
(array[2],array[1])

數(shù)組操作

矩陣轉(zhuǎn)置

a = np.random.rand(2,4)
print "a:"
print a
a = np.transpose(a)
print "a is an array, by using transpose(a):"
print a
b = np.random.rand(2,4)
b = np.mat(b)
print "b:"
print b
print "b is a matrix, by using b.T:"
print b.T

a:
[[ 0.17571282  0.98510461  0.94864387  0.50078988]
 [ 0.09457965  0.70251658  0.07134875  0.43780173]]
a is an array, by using transpose(a):
[[ 0.17571282  0.09457965]
 [ 0.98510461  0.70251658]
 [ 0.94864387  0.07134875]
 [ 0.50078988  0.43780173]]
b:
[[ 0.09653644  0.46123468  0.50117363  0.69752578]
 [ 0.60756723  0.44492537  0.05946373  0.4858369 ]]
b is a matrix, by using b.T:
[[ 0.09653644  0.60756723]
 [ 0.46123468  0.44492537]
 [ 0.50117363  0.05946373]
 [ 0.69752578  0.4858369 ]]

矩陣求逆

import numpy.linalg as nlg
a = np.random.rand(2,2)
a = np.mat(a)
print "a:"
print a
ia = nlg.inv(a)
print "inverse of a:"
print ia
print "a * inv(a)"
print a * ia

a:
[[ 0.86211266  0.6885563 ]
 [ 0.28798536  0.70810425]]
inverse of a:
[[ 1.71798445 -1.6705577 ]
 [-0.69870271  2.09163573]]
a * inv(a)
[[ 1.  0.]
 [ 0.  1.]]

按列拼接兩個(gè)向量組成一個(gè)矩陣

a = np.array((1,2,3))
b = np.array((2,3,4))
print np.column_stack((a,b))

[[1 2]
 [2 3]
 [3 4]]

缺失值

缺失值在分析中也是信息的一種,NumPy提供nan作為缺失值的記錄,通過isnan判定

a = np.random.rand(2,2)
a[0,1] = np.nan
print(np.isnan(a))

[[False  True]
 [False False]]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容