python数字处理技巧(2): Numpy、矩阵运算、随机、字符串日期
生活随笔
收集整理的這篇文章主要介紹了
python数字处理技巧(2): Numpy、矩阵运算、随机、字符串日期
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 大型數組運算 numpy
需要在大數據集(比如數組或網格)上面執行計算。涉及到數組的重量級運算操作,可以使用 NumPy 庫。 NumPy 的一個主要特征是給Python提供一個數組對象,相比標準的Python列表更適合做數學運算。 下面展示了標準列表對象和 NumPy 數組對象之間的差別:
import numpy as npx = [1,2,3,4] y = [5,6,7,8] print( x*2 ) # [1, 2, 3, 4, 1, 2, 3, 4] print( x+y ) # [1, 2, 3, 4, 5, 6, 7, 8] """#TypeError: can only concatenate list (not "int") to list""" # print( x+10) nx = np.array(x) ny = np.array(y) print( nx*2 ) # [2 4 6 8] print( nx+ny ) # [ 6 8 10 12] print( nx+10 ) # [11 12 13 14]- ?兩種方案中數組的基本數學運算結果并不相同。 特別的, NumPy 中的標量運算(比如 ax * 2 或 ax + 10 )會作用在每一個元素上。 當兩個操作數都是數組的時候執行元素對等位置計算,并最終生成一個新的數組。
- NumPy 還為數組操作提供了大量的通用函數,這些函數可以作為 math 模塊中類似函數的替代。例如, np.sqrt(), np.cos()。使用這些通用函數要比循環數組并使用 math 模塊中的函數執行計算要快的多。 因此,盡量選擇 NumPy 的數組方案。
- 底層實現中, NumPy 數組使用了C或者Fortran語言的機制分配內存。 它是一個非常大的連續的并由同類型數據組成的內存區域。 所以,可以構造一個比普通Python列表大的多的數組。 比如,構造一個10,000*10,000的浮點數二維網格。
- 特別主意:numpy擴展了Python列表的索引功能 - 特別是對于多維數組。
2. 矩陣與線性代數運算 numpy
當執行矩陣和線性代數運算,比如矩陣乘法、尋找行列式、求解線性方程組的時候也可以利用numpy處理。
NumPy 庫有一個矩陣對象可以用來解決這個問題。 矩陣類似上面的數組對象,但是遵循線性代數的計算規則。
- numpy.?matrix()
- numpy.linalg : 行列式、特征值、特征性向量、線性代數求解等
3. 隨機選擇 random
可以利用random模塊從一個序列中隨機抽取若干元素,或者想生成幾個隨機數。random 模塊有大量的函數用來產生隨機數和隨機選擇元素。
import random# 隨機取單個樣例 values = [1, 2, 3, 4, 5, 6] print( random.choice(values) ) # 1 print( random.choice(values) ) # 5# 隨機抽取多個樣例 print( random.sample(values, 3) ) # >>> [1, 5, 3] print( random.sample(values, 3) ) # >>> [4, 1, 6]# 打亂數組/列表的順序 random.shuffle(values) print( values ) # >>> [1, 6, 2, 4, 3, 5]# 生成指定范圍內的整數隨機數 print( random.randint(0,10) ) # >>> 8# 生成0到1范圍內均勻分布的浮點數 print( random.random() ) # >>> 0.38424002551957526Comment:
- random 模塊使用 Mersenne Twister 算法來計算生成隨機數。這是一個確定性算法, 但是可以通過 random.seed() 函數修改初始化種子。
- random模塊還包含基于均勻分布、高斯分布和其他分布的隨機數生成函數。 random.uniform() 計算均勻分布隨機數, random.gauss() 計算正態分布隨機數。
4. 日期與時間轉換 datatime
當我們的應用程序接受字符串格式輸入,可以將它轉換為 datetime 對象并執行非字符串操作。
from datetime import datetimetext = '2018-10-28' y = datetime.strptime(text, '%Y-%m-%d') z = datetime.now() diff = z - y print( diff ) # >>> 1 day, 11:00:32.970036datetime.strptime() 方法支持很多的格式化代碼, 比如 %Y 代表4位數年份, %m 代表兩位數月份。 還有一點值得注意的是這些格式化占位符也可以反過來使用,將日期輸出為指定的格式字符串形式。
本文參考《python3-codebook》
總結
以上是生活随笔為你收集整理的python数字处理技巧(2): Numpy、矩阵运算、随机、字符串日期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给程序员的忠告:九种不值得你追随的老板
- 下一篇: python迭代器生成器使用技巧(1):