數據分析之numpy使用

使用numpy生成數字

生成的類型是ndarray類型python

t1 = np.array([1,2,3,4,5])
print(t1,type(t1))        # 類型爲ndarray

t2 = np.array(range(10))
print(t2)

t3 = np.arange(10)   # 至關於array+range
print(t3,t3.dtype)  # dtype 能夠查看數組內的數據類型

t4 = np.arange(10,dtype="f2")   # 制定數據類型
print(t4.dtype)

t5 = np.array([random.random() for i in range(10)])  # 10個小數
print(t5)

t6 = np.round(t5,2)  # 取小數後兩位
print(t6)
[1 2 3 4 5] <class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9] int32
float16
[0.71127883 0.16178949 0.57974356 0.92394061 0.29455775 0.44950361
 0.30519271 0.23295048 0.24572958 0.85217598]
[0.71 0.16 0.58 0.92 0.29 0.45 0.31 0.23 0.25 0.85]

numpy常見的數據類型數組

 

查看數組的形狀(幾行幾列)

一維數組dom

a1 = np.arange(12)
print(a1)
a1.shape

[ 0  1  2  3  4  5  6  7  8  9 10 11]

二維數組函數

a2 = np.array([[1,2,3],[4,5,6]])
print(a2)
a2.shape

[[1 2 3]
 [4 5 6]]

三維數組spa

a3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(a3)
a3.shape

[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]

改變數組的形狀

b1 = np.arange(12)
b1.reshape(3,4)   # 將原數組形狀變成3行4列的二維數組

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
b2 = np.arange(24).reshape((2,3,4))   # 2表示塊兒數 (3,4)表示每一塊的形狀
print(b2) 

b2.reshape(4,6)  # 將b2變形爲4行6列的2維數組    reshape是有返回值的  不會改變b2原來的數據

# 將b2變形爲1維數的兩種方式
b2.flatten()
b2.reshape((24,))  


[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

數組的計算

數組和數字進行計算(廣播機制)code

c1 = np.arange(12)
print(c1)

# (廣播機制) 當咱們把數組與數字進行計算的時候 它會把計算的過程應用到數組的每個數字 而後分別計算

c1+2   [ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13]
c1*2   [ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22]
c1/2   [0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5]
c1/0   [nan, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf]

數組與數組之間的計算(形狀相同)blog

c2 = np.arange(24)
c3 = np.arange(100,124)
print(c2,c3)

# 當數組中的數據長度相同時
# 兩個數組中的數據一一對應進行計算
c2+c3   [100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124,
       126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146]

c2*c3   [   0,  101,  204,  309,  416,  525,  636,  749,  864,  981, 1100,
       1221, 1344, 1469, 1596, 1725, 1856, 1989, 2124, 2261, 2400, 2541,
       3 2684, 2829]

c2/c3   [0.        , 0.00990099, 0.01960784, 0.02912621, 0.03846154,
       0.04761905, 0.05660377, 0.06542056, 0.07407407, 0.08256881,
       0.09090909, 0.0990991 , 0.10714286, 0.11504425, 0.12280702,
       0.13043478, 0.13793103, 0.14529915, 0.15254237, 0.15966387,
       0.16666667, 0.17355372, 0.18032787, 0.18699187]

數組和形狀不同的數組進行計算索引

# 當他們在某一維度形狀同樣時是能夠進行計算的
n1 = np.arange(12).reshape((4,3))
n2 = np.arange(4).reshape((4,1))
print(n1)
print(n2)
n1+n2        # n1與n2行數相同

array([[ 0,  1,  2],
       [ 4,  5,  6],
       [ 8,  9, 10],
       [12, 13, 14]])

總結:ip

兩個不一樣形狀的數組 只要在某一維度相同就是能夠計算的
  - 若是全部維度都不相同 是不能夠計算的class

numpy讀取數據

 

行列轉換

s1 = np.arange(24).reshape(4,6)
print(s1)

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

方法一

np.loadtxt(frame,unpack=True)  # loadtxt中的unpack設置爲True也是能夠將從文件讀取出來的數據進行行列轉換的

方法二

s1.transpose()

方法三

s1.T

方法四

# 0表明x軸,1表明y軸
s1.swapaxes(1,0)  # 交換軸

numpy的索引和切片

z1 = np.arange(24).reshape(4,6)

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

行操做

# 取行
print(z1[2])   # 中括號就是取行

# 連續取多行
print(z1[[1,2]])
print(z1[1:])

# 取不連續多行
print(z1[[1,3]])

列操做

# 取列
print(z1[:,1])

# 取連續多列
print(z1[:,3:])

# 取不連續多列
print(z1[:,[1,3,5]])

取行和列

# 取行和列的值  取第3行4列的值      這裏注意咱們在取值時用的都是索引,行和列都是從0開始, 而咱們正常都是從1開始數行和列的
print(z1[2,3])


z2 = np.arange(100).reshape(10,10)
print(z2)
# 取多行和多列  取第3行到第6行  第2列到第5列的結果
print(z2[2:6,1:5])   # 取得是行和列交叉點得位置


# 取多個不相鄰得值
# print(z2[[1,2],[2,4]])  # 分別取第2行的第3列  和 第3行的第5列的值   選出來的點就是(1,2)  (2,4)

print(z2[[6,7,8],[6,7,8]])  # 選出來的點是(6,6) (7,7) (8,8)

numpy中數值修改

從新賦值

# 取到值後從新賦值便可
res = np.arange(12).reshape(3,4)
# 將6修改成100
res[1,2]=100
print(res)

# 修改多個值
res[1:2]=[3,3,3,4]
print(res)

[[  0   1   2   3]
 [  4   5 100   7]
 [  8   9  10  11]]
[[ 0  1  2  3]
 [ 3  3  3  4]
 [ 8  9 10 11]]

根據範圍取值

ret = np.arange(100).reshape(10,10)
print(ret)

# 根據範圍取值
ret[ret<50] = 666
print(ret)


[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]

[[666 666 666 666 666 666 666 666 666 666]
 [666 666 666 666 666 666 666 666 666 666]
 [666 666 666 666 666 666 666 666 666 666]
 [666 666 666 666 666 666 666 666 666 666]
 [666 666 666 666 666 666 666 666 666 666]
 [ 50  51  52  53  54  55  56  57  58  59]
 [ 60  61  62  63  64  65  66  67  68  69]
 [ 70  71  72  73  74  75  76  77  78  79]
 [ 80  81  82  83  84  85  86  87  88  89]
 [ 90  91  92  93  94  95  96  97  98  99]]

三元運算

tt = np.arange(100).reshape(10,10)
np.where(tt<50,0,1)   # 全部小於50的替換成0,大於50的替換成1

array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])

numpy中的clip(裁剪)

w = np.arange(100).reshape(10,10)
w.clip(50,60)     # 將小於50的替換成50,大於60的替換成60

array([[50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
       [50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
       [50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
       [50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
       [50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
       [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
       [60, 60, 60, 60, 60, 60, 60, 60, 60, 60],
       [60, 60, 60, 60, 60, 60, 60, 60, 60, 60],
       [60, 60, 60, 60, 60, 60, 60, 60, 60, 60],
       [60, 60, 60, 60, 60, 60, 60, 60, 60, 60]])

數組的拼接

數組的行列轉換

numpy生成隨機數

 

numpy中的nan和inf

nan注意點

axis=0 取的是列上的每一行數據

axis=1  取得是行上得每一列數據

什麼是中值?

[1,2,3,4,5]    # 中值爲3
[1,2,3,4,5,6]  # 中值爲 (3+4)/2 = 3.5

numpy中經常使用得統計函數

numpy中的刪除操做

相關文章
相關標籤/搜索