數據分析 大數據之路 四 numpy 2

 NumPy 數學函數

NumPy 提供了標準的三角函數:sin()、cos()、tan(import numpy as np

 
a = np.array([0,30,45,60,90])
print ('不一樣角度的正弦值:')
# 經過乘 pi/180 轉化爲弧度
print (np.sin(a*np.pi/180))
print ('\n')
print ('數組中角度的餘弦值:')
print (np.cos(a*np.pi/180))
print ('\n')
print ('數組中角度的正切值:')
print (np.tan(a*np.pi/180))
不一樣角度的正弦值:
[0.         0.5        0.70710678 0.8660254  1.        ]

數組中角度的餘弦值:
[1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
 6.12323400e-17]

數組中角度的正切值:
[0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
 1.63312394e+16]

 

 

numpy.around() 函數返回指定數字的四捨五入值

import numpy as np

a = np.array([1.0,5.55, 123, 0.567, 25.532])
print ('原數組:')
print (a)
print ('\n')
print ('舍入後:')
print (np.around(a))

原數組:
[  1.      5.55  123.      0.567  25.532]


舍入後:
[  1.   6. 123.   1.  26.]

 

numpy.floor() 返回數字的下舍整數

import numpy as np
 
a = np.array([-1.7,  1.5,  -0.2,  0.6,  10])
print ('原數組:')
print (a)
print ('\n')
print ('floor 後的數組:')
print (np.floor(a))
原數組:
[-1.7  1.5 -0.2  0.6 10. ]

floor 後的數組:
[-2.  1. -1.  0. 10.]

 

 numpy.ceil() 返回數字的上入整數

import numpy as np
 
a = np.array([-1.7,  1.5,  -0.2,  0.6,  10])  
print  ('原數組:')
print (a)
print ('\n')
print ('ceil 後的數組:')
print (np.ceil(a))

  

原數組:
[-1.7  1.5 -0.2  0.6 10. ]


ceil 後的數組:
[-1.  2. -0.  1. 10.]

 

NumPy 算術函數

NumPy 算術函數包含簡單的加減乘除: add(),subtract(),multiply() 和 divide()

add() 加法python

a = np.arange(9, dtype = np.float_).reshape(3,3)  
print ('第一個數組:')
print (a)
print ('\n')
print ('第二個數組:')
b = np.array([10,10,10])  
print (b)
print ('\n')
print ('兩個數組相加:')
print (np.add(a,b))
第一個數組:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]

第二個數組:
[10 10 10]

兩個數組相加:
[[10. 11. 12.]
 [13. 14. 15.]
 [16. 17. 18.]]

  

subtract()減法
a = np.arange(9, dtype = np.float_).reshape(3,3)  
print ('第一個數組:')
print (a)
print ('\n')
print ('第二個數組:')
b = np.array([10,10,10])  
print (b)
print ('\n')
print ('兩個數組相減:')
print (np.subtract(a,b))
第一個數組:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]

第二個數組:
[10 10 10]
兩個數組相減:
[[-10.  -9.  -8.]
 [ -7.  -6.  -5.]
 [ -4.  -3.  -2.]]

下邊再也不演示數組

 

numpy.reciprocal() 函數返回參數逐元素的倒數。如 1/4 倒數爲 4/1。

reciprocal() 倒數
import numpy as np 
a
= np.array([0.25, 1.33, 1, 100]) print ('原數組:') print (a) print ('\n') print ('調用 reciprocal 函數:') print (np.reciprocal(a))
原數組:
[  0.25   1.33   1.   100.  ]

調用 reciprocal 函數:
[4.        0.7518797 1.        0.01     ]

 

numpy.power() 函數將第一個輸入數組中的元素做爲底數,計算它與第二個輸入數組中相應元素的冪

import numpy as np 
 
a = np.array([10,100,1000])  
print ('原組是;')
print (a)
print ('\n') 
print ('調用 power 函數:')
print (np.power(a,2))
print ('\n')
print ('第二個數組:')
b = np.array([1,2,3])  
print (b)
print ('\n')
print ('再次調用 power 函數:')
print (np.power(a,b))
原組是;
[  10  100 1000]

調用 power 函數:
[    100   10000 1000000]

第二個數組:
[1 2 3]

再次調用 power 函數:
[        10      10000 1000000000]

  

numpy.mod() 計算輸入數組中相應元素的相除後的餘數。 函數 numpy.remainder() 也產生相同的結果。
求餘

import numpy as np
 
a = np.array([10,20,30]) 
b = np.array([3,5,7])  
print ('第一個數組:')
print (a)
print ('\n')
print ('第二個數組:')
print (b)
print ('\n')
print ('調用 mod() 函數:')
print (np.mod(a,b))
print ('\n')
print ('調用 remainder() 函數:')
print (np.remainder(a,b))

  

第一個數組:
[10 20 30]

第二個數組:
[3 5 7]

調用 mod() 函數:
[1 0 2]

調用 remainder() 函數:
[1 0 2]

  

 

NumPy 統計函數

numpy.amin() 和 numpy.amax()

把每一個元素的最小(大)值取出,放進一個數組中dom

import numpy as np 
 
a = np.array([[3,7,5],[8,4,3],[2,4,9]])  
print ('原數組:')
print (a)
print ('\n')
print ('調用 amin() 函數:')
print (np.amin(a,1))
print ('\n')
print ('再次調用 amin() 函數:')
print (np.amin(a,0))
print ('\n')
print ('調用 amax() 函數:')
print (np.amax(a))
print ('\n')
print ('再次調用 amax() 函數:')
print (np.amax(a, axis =  0))

  

原數組:
[[3 7 5]
 [8 4 3]
 [2 4 9]]

調用 amin() 函數:
[3 3 2]

再次調用 amin() 函數:
[2 4 3]

調用 amax() 函數:
9

再次調用 amax() 函數:
[8 7 9]

  

numpy.median() 函數用於計算數組 a 中元素的中位數(中值)

import numpy as np 
 
a = np.array([[30,65,70],[80,95,10],[50,90,60]])  
print ('原數組:')
print (a)
print ('\n')
print ('調用 median() 函數:')
print (np.median(a))
print ('\n')
print ('沿軸 0 調用 median() 函數:')
print (np.median(a, axis =  0))
print ('\n')
print ('沿軸 1 調用 median() 函數:')
print (np.median(a, axis =  1))
原數組:
[[30 65 70]
 [80 95 10]
 [50 90 60]]

調用 median() 函數:
65.0


沿軸 0 調用 median() 函數:
[50. 90. 60.]

沿軸 1 調用 median() 函數:
[65. 80. 60.]

 

numpy.mean() 函數返回數組中元素的算術平均值。 若是提供了軸,則沿其計算。

import numpy as np 
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print ('原數組:')
print (a)
print ('\n')
print ('調用 mean() 函數:')
print (np.mean(a))
print ('\n')
print ('沿軸 0 調用 mean() 函數:')
print (np.mean(a, axis =  0))
print ('\n')
print ('沿軸 1 調用 mean() 函數:')
print (np.mean(a, axis =  1))
原數組:
[[1 2 3]
 [3 4 5]
 [4 5 6]]

調用 mean() 函數:
3.6666666666666665

沿軸 0 調用 mean() 函數:
[2.66666667 3.66666667 4.66666667]

沿軸 1 調用 mean() 函數:
[2. 4. 5.]

 

標準差和方差

import numpy as np 
 
print (np.std([1,2,3,4]))
print (np.var([1,2,3,4]))
1.118033988749895
1.25

  

 

NumPy 排序、條件篩選函數

numpy.sort() 函數返回輸入數組的排序副本

import numpy as np  
 
a = np.array([[3,7],[9,1]])  
print ('原數組:')
print (a)
print ('\n')
print ('調用 sort() 函數:')
print (np.sort(a))
print ('\n')
print ('按列排序:')
print (np.sort(a, axis =  0))
print ('\n')
# 在 sort 函數中排序字段 
dt = np.dtype([('name',  'S10'),('age',  int)]) 
a = np.array([("raju",21),("anil",25),("ravi",  17),  ("amar",27)], dtype = dt)  
print ('原數組:')
print (a)
print ('\n')
print ('按 name 排序:')
print (np.sort(a, order =  'name'))

  

原數組:
[[3 7]
 [9 1]]

調用 sort() 函數:
[[3 7]
 [1 9]]

按列排序:
[[3 1]
 [9 7]]

原數組:
[(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)]


按 name 排序:
[(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]

  

 numpy.argsort() 函數返回的是數組值從小到大的索引值

import numpy as np 
 
x = np.array([3,  1,  2])  
print ('原數組:')
print (x)
print ('\n')
print ('對 x 調用 argsort() 函數:')
y = np.argsort(x)  
print (y)
print ('\n')
print ('以排序後的順序重構原數組:')
print (x[y])
print ('\n')
print ('使用循環重構原數組:')
for i in y:  
    print (x[i])

  

原數組:
[3 1 2]

對 x 調用 argsort() 函數:
[1 2 0]

以排序後的順序重構原數組:
[1 2 3]

使用循環重構原數組:
1
2
3

  

numpy.where() 函數返回輸入數組中知足給定條件的元素的索引

import numpy as np 
 
x = np.arange(9.).reshape(3,  3)  
print ('原數組:')
print (x)
print ( '大於 3 的元素的索引:')
y = np.where(x >  3)  
print (y)
print ('使用這些索引來獲取知足條件的元素:')
print (x[y])
原數組:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
大於 3 的元素的索引:
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
使用這些索引來獲取知足條件的元素:
[4. 5. 6. 7. 8.]

  

NumPy 副本和視圖

 副本或深拷貝

ndarray.copy() 函數建立一個副本。 對副本數據進行修改,不會影響到原始數據,它們物理內存不在同一位置

import numpy as np 
 
a = np.array([[10,10],  [2,3],  [4,5]])  
print ('數組 a:')
print (a)
print ('建立 a 的深層副本:')
b = a.copy()  
print ('數組 b:')
print (b)
# b 與 a 不共享任何內容  
print ('咱們可以寫入 b 來寫入 a 嗎?')
print (b is a)
print ('修改 b 的內容:')
b[0,0]  =  100  
print ('修改後的數組 b:')
print (b)
print ('a 保持不變:')
print (a)

  

數組 a:
[[10 10]
 [ 2  3]
 [ 4  5]]
建立 a 的深層副本:
數組 b:
[[10 10]
 [ 2  3]
 [ 4  5]]
咱們可以寫入 b 來寫入 a 嗎?
False
修改 b 的內容:
修改後的數組 b:
[[100  10]
 [  2   3]
 [  4   5]]
a 保持不變:
[[10 10]
 [ 2  3]
 [ 4  5]]

 

淺拷貝

import numpy as np 
 
a = np.arange(6)  
print ('原數組:')
print (a)
print ('調用 id() 函數:')
print (id(a))
print ('a 賦值給 b:')
b = a 
print (b)
print ('b 擁有相同 id():')
print (id(b))
print ('修改 b 的形狀:')
b.shape =  3,2  
print (b)
print ('a 的形狀也修改了:')
print (a)

  

原數組:
[0 1 2 3 4 5]
調用 id() 函數:
139630489172528
a 賦值給 b:
[0 1 2 3 4 5]
b 擁有相同 id():
139630489172528
修改 b 的形狀:
[[0 1]
 [2 3]
 [4 5]]
a 的形狀也修改了:
[[0 1]
 [2 3]
 [4 5]]

 

NumPy 線性代數

 NumPy 提供了線性代數函數庫 linalg,該庫包含了線性代數所需的全部功能

numpy.dot() 對於兩個一維的數組,計算的是這兩個數組對應下標元素的乘積和(數學上稱之爲內積);對於二維數組,計算的是兩個數組的矩矩陣乘積

import numpy.matlib
import numpy as np
 
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print(np.dot(a,b))

  

[[37 40]
 [85 92]]

 

numpy.vdot() 函數是兩個向量的點積。 若是第一個參數是複數,那麼它的共軛複數會用於計算。 若是參數是多維數組,它會被展開。

import numpy as np 
 
a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
 
# vdot 將數組展開計算內積
print (np.vdot(a,b))
130

 

numpy.inner() 函數返回一維數組的向量內積。對於更高的維度,它返回最後一個軸上的和的乘積

import numpy as np 
 
print (np.inner(np.array([1,2,3]),np.array([0,1,0])))
2

  

numpy.matmul 函數返回兩個數組的矩陣乘積。

import numpy.matlib
import numpy as np

a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print (np.matmul(a,b))ide

[[4 1] 函數

[2 2]]spa

 

numpy.linalg.det() 函數計算輸入矩陣的行列式。

import numpy as np
a = np.array([[1,2], [3,4]])
print (np.linalg.det(a))code

-2.0000000000000004orm

 

 

numpy.linalg.solve() 函數給出了矩陣形式的線性方程的解。

考慮如下線性方程:

$\left\{\begin{matrix}
x+y+z=6
& \\ 2y+5z=-4
& \\ 2x+5y-z=27
\end{matrix}\right.$對象

$\begin{bmatrix}
1&1 &1 \\
0&2 &5 \\
2& 5& -1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
z
\end{bmatrix}
=\begin{bmatrix}
6\\
-4\\
27
\end{bmatrix}$blog

 

import numpy as np 
 
a = np.array([[1,1,1],[0,2,5],[2,5,-1]]) 
 
print ('數組 a:')
print (a)
 
print ('矩陣 b:')
b = np.array([[6],[-4],[27]]) 
print (b)
 
x = np.linalg.solve(a,b) 
print ('求解')
print (x)

  

數組 a:
[[ 1  1  1]
 [ 0  2  5]
 [ 2  5 -1]]
矩陣 b:
[[ 6]
 [-4]
 [27]]
求解
[[ 5.]
 [ 3.]
 [-2.]]

  

 

持久化(將這個對象保存到硬盤上)

 使用  H5PY ,PICKLE

# -*- coding: utf-8 -*-
# 斌彬電腦
# @Time : 2019-03-28  上午 9:31

import pickle
import numpy as np

A = 1000

def pickle_dump():
    """
    數據持久化
    :return:
    """
    with open('sampk.pkl', 'wb') as f:
        # 生成二維的隨機數
        array = np.random.randn(A, A)
        pickle.dump(array, f)
        print('持久化{}'.format(array))


def pickle_load():
    """
    反持久化
    :return:
    """
    with open('sampk.pkl', 'rb') as f:
        array = pickle.load(f)
        print('反持久化{}'.format(array))


if __name__ == '__main__':
    pickle_dump()
    pickle_load()

  

 

# -*- coding: utf-8 -*-
# 斌彬電腦
# @Time : 2019-03-28  下午 4:53

import numpy as np
import h5py
import numpy as np
import h5py
'''h5py就是以 k, v 的形式存儲'''

N = 1000

def pickle_serialization():
    """
    持久化
    :return:
    """
    with h5py.File("sample.h5", "w") as hf:
        array = np.random.randn(N, N)
        # 能夠示爲生成個 group 的文件夾
        group = hf.create_group("group")
        # dataset 能夠示爲是個列表
        group.create_dataset("dataset", data=array)
        print("持久化: {}".format(array))


def pickle_deserialization():
    """
    反持久化
    :return:
    """
    with h5py.File("sample.h5", "r") as hf:
        for key in hf.keys():
            group = hf.get(key)
            for item in group.items():
                print("After deserialization: {}".format(group[item[0]].value))


if __name__ == '__main__':
    pickle_serialization()
    pickle_deserialization()

  

 

 

 

 

 

 

陣乘積;

相關文章
相關標籤/搜索