艺赛旗(RPA)Numpy 入门学习
目前藝賽旗RPA已經更新到8.0版本,可以讓所有用戶免費下載試用http://www.i-search.com.cn/index.html?from=line1 (復制鏈接下載)
在最近的一個新項目中,遇到了對 excel 操作的問題。趁此機會對 numpy 做了一個簡單的了解,這里和大家分享一下。
2.numpy 的介紹
Numpy(Numeric Python)是一個用 python 實現的科學計算的擴展程序庫。包括:1、一個強大的 N 維數組對象 Array;2、比較成熟的(廣播)函數庫;3、用于整合 C/C++ 和 Fortran 代碼的工具包;4、實用的線性代數、傅里葉變換和隨機數生成函數。提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。
3.Numpy 基本操作
import numpy as np
a = np.array([[1,2],[3,4]])
print(a)
輸出"[[1 2]
[3 4]]"
print(a.ndim) # 維度,輸出: 2
行數和列數
print(a.shape) # 輸出: (2, 2)
元素個數
print(a.size) # 輸出: 4
4.Numpy 的數組 (Array)
Numpy 數組是一個由不同數值組成的網格, 網格中的數據都是同一種數據類型并且可以通過非負整型數的元組來訪問。維度的多少被稱為數組的階,數組的大小是一個由整型數構成的元組,可以描述數組不同維度上的大小。
創建numpy數組
import numpy as np
a = np.array([1, 2, 3]) # 創建一維數組
print(type(a)) # 輸出 “”
print(a[0], a[1], a[2]) # 輸出 “1 2 3”
a[0] = 8 # 修改數組某元素的值
print(a[0]) # 輸出 “8”
其他創建數組的方法
b = np.zeros((2, 2))
print(b) # 輸出 “[[ 0. 0.]
# [ 0. 0.]]”
c = np.ones((1,2))
print? # 輸出 “[[ 1. 1.]”
d = np.eye(2) # 創建單位矩陣
print(d) # 輸出 “[[ 1. 0.]
# [ 0. 1.]]”
e = np.random.random((2, 2)) # 隨機值
print(e) # 輸出 “[[0.29027784 0.01445969]
# [0.76571518 0.75046783]]”
5. 數組索引
Numpy 提供了多種訪問數組的方法。
import numpy as np
# 切片:和Python列表類似,numpy數組也可以使用切片語法。
由于數組可能是多維的,因此必須為數組的每個維指定切片。
創建一個二維數組,shape為 (3,2)
a = np.array([[1, 2],[3, 4],[5, 6]])
b = a[:1,1:2]
print(b) # 輸出"[[2]]"
#可以同時使用整型和切片語法來訪問數組。這樣做會產生比原數組低階的新數組。
row_r1 = a[1, :]
row_r2 = a[1:2, :]
print(row_r1, row_r1.shape) # Prints “[3 4] (2,)”
print(row_r2, row_r2.shape) # Prints “[[3 4]] (1, 2)”
使用切片語法訪問數組時,得到的總是原數組的一個子集
整型數組訪問允許我們利用其它數組的數據構建一個新的數組
a1 = np.array([[1,2], [3, 4], [5, 6]])
print(a1[[0, 1, 2], [0, 1, 0]]) # Prints “[1 4 5]”
等價于以下操作
print(np.array([a1[0, 0], a1[1, 1], a1[2, 0]]))
布爾型數組訪問:布爾型數組訪問可以讓你選擇數組中任意元素
這種訪問方式用于選取數組中滿足某些條件的元素
a2 = np.array([[1,2], [3, 4], [5, 6]])
b2 = (a > 2)
print(b2)
print(a2[b2]) # 輸出 “[3 4 5 6]”
等價于
print(a[a>2]) # 輸出 “[3 4 5 6]”
6. 數組類型
每個 Numpy 數組的元素數據類型相同。創建數組的時候,Numpy 會嘗試猜測數組的數據類型,當然也可以通過參數直接指定數據類型。
import numpy as np
x1 = np.array([1, 2]) # numpy選擇類型
print(x1.dtype) # 輸出"int32"
x2 = np.array([1.0, 2.0]) # numpy選擇類型
print(x2.dtype) # 輸出"float64"
x3 = np.array([1, 2], dtype=np.int64) # 指定類型
print(x3.dtype) # 輸出"int64"
7. 數組計算
基本數學計算函數會對數組中元素逐個進行計算,既可以利用操作符重載,也可以使用函數方式。
import numpy as np
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
按元素相加,產生的還是同樣shape的數組
輸出 "[[ 6. 8.]
[10. 12.]]"
print(x + y)
print(np.add(x, y))
按元素相減
輸出 "[[ 6. 8.]
[10. 12.]]"
print(x - y)
print(np.subtract(x, y))
按元素相乘
輸出 "[[ 5. 12.]
[21. 32.]]"
print(x * y)
print(np.multiply(x, y))
按元素相除
輸出 "[[0.2 0.33333333]
[0.42857143 0.5 ]]"
print(x / y)
print(np.divide(x, y))
開平方
輸出 "[[1. 1.41421356]
[1.73205081 2. ]]"
print(np.sqrt(x))
numpy矩陣乘法
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11, 12])
向量的內積,輸出:219
print(v.dot(w))
print(np.dot(v, w))
向量/矩陣乘積
輸出 “[29 67]”
print(x.dot(v))
print(np.dot(x, v))
矩陣/矩陣乘積
輸出 "[[19 22]
[43 50]]"
print(x.dot(y))
print(np.dot(x, y))
求和函數sum
x = np.array([[1,2],[3,4]])
print(np.sum(x)) # 所有元素相加,輸出"10"
print(np.sum(x, axis=0)) # 按列相加,輸出"[4 6]"
print(np.sum(x, axis=1)) # 按行相加,輸出"[3 7]"
轉置操作
x = np.array([[1,2], [3,4]])
print(x) # 輸出 “[[1 2]
# [3 4]]”
print(x.T) # 輸出 “[[1 3]
# [2 4]]”
8.廣播機制 (Broadcasting)
廣播是一種強有力的機制,可以讓不同大小的矩陣進行數學計算。我們常常會有一個小的矩陣和一個大的矩陣,然后我們會需要用小的矩陣對大的矩陣做一些計算。
把一個向量加到矩陣的每一行,可以這樣做
import numpy as np
x = np.array([[1,2,3], [4,5,6], [7,8,9]])
v = np.array([1, 0, 1])
y = np.empty_like(x) # 創建一個空矩陣,shape和x一致
for i in range(3):
y[i, :] = x[i, :] + v
print(y)
輸出
[[ 2 2 4]
[ 5 5 7]
[ 8 8 10]]
當x矩陣非常大,利用循環來計算就會變得很慢很慢
換一種思路
vv = np.tile(v, (3, 1)) # 將v復制三次堆疊在一起
print(vv) # 輸出 “[[1 0 1]
# [1 0 1]
# [1 0 1]”
y = x + vv # 按元素相加
print(y)
Numpy廣播機制讓我們不用創建vv,就能直接運算
y = x + v # 使用廣播將v添加到x的每一行
print(y)
廣播機制例子
1.計算向量的外積
v = np.array([1,2,3]) # v 的shape (3,)
w = np.array([4,5]) # w 的shape (2,)
首先將v轉化成(3, 1),然后廣播
輸出的shape為(3, 2)
[[ 4 5]
[ 8 10]
[12 15]]
print(np.reshape(v, (3, 1)) * w)
2.向矩陣的每一行添加一個向量
x = np.array([[1,2,3], [4,5,6]])
x的shape為(2,3),v的shape為(3,),因此它們廣播得到(2,3)
輸出:
[[2 4 6]
[5 7 9]]
print(x + v)
3.向矩陣的每一列添加一個向量
x 的shape (2, 3) and w的shape (2,).
# 轉置x的shape(3,2),針對w廣播以產生形狀的結果(3,2)
輸出:
[[ 5 6 7]
[ 9 10 11]]
print((x.T + w).T)
4.另一個解決方案是將w重塑shape為(2,1)
然后可以直接對x廣播它以產生相同的效果
輸出
print(x + np.reshape(w,(2,1)))
5.用常數乘以矩陣
輸出:
[[ 2 4 6]
[ 8 10 12]]
print(x * 2)
以上作為簡單例子,歡迎糾錯和補充。
總結
以上是生活随笔為你收集整理的艺赛旗(RPA)Numpy 入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React 高阶组件HOC详解
- 下一篇: lives