日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数字处理技巧(2): Numpy、矩阵运算、随机、字符串日期

發布時間:2025/3/15 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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列表的索引功能 - 特別是對于多維數組
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print( a ) # >>> [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print( a[0] ) # >>> [1 2 3 4] print( a[:,1] ) # >>> [ 2 6 10] print( a[0:2, 0:2]) # >>> [[1 2] # [5 6]] print( np.where(a < 5, a, 0)) # >>> [[1 2 3 4] # [0 0 0 0] # [0 0 0 0]]

2. 矩陣與線性代數運算 numpy

當執行矩陣和線性代數運算,比如矩陣乘法、尋找行列式、求解線性方程組的時候也可以利用numpy處理。

NumPy 庫有一個矩陣對象可以用來解決這個問題。 矩陣類似上面的數組對象,但是遵循線性代數的計算規則。

  • numpy.?matrix()
m = np.matrix([[1,-2,3], [0,4,5], [7,8,-9]]) print( m ) # >>> [[ 1 -2 3] # [ 0 4 5] # [ 7 8 -9]] print( m.T ) # >>> [[ 1 0 7] # [-2 4 8] # [ 3 5 -9]] print( m.I ) # 逆矩陣 # >>> [[ 0.33043478 -0.02608696 0.09565217] # [-0.15217391 0.13043478 0.02173913] # [ 0.12173913 0.09565217 -0.0173913 ]] v = np.matrix([[2],[3],[4]]) print( v ) # 列向量作為矩陣的乘子 # >>> [[2] # [3] # [4]] print( m * v ) # >>> [[ 8] # [32] # [ 2]]
  • numpy.linalg : 行列式、特征值、特征性向量、線性代數求解等
import numpy.linalgm = np.matrix([[1,-2,3], [0,4,5], [7,8,-9]]) v = np.matrix([[2],[3],[4]]) # 計算行列式 print( numpy.linalg.det(m) ) # >>> -229.99999999999983 # 計算奇異值 print( numpy.linalg.eigvals(m) ) # >>> [-13.11474312 2.75956154 6.35518158] # 計算線性方程的解 mx=v print( numpy.linalg.solve(m, v) ) # >>> [[0.96521739] # [0.17391304] # [0.46086957]]

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.38424002551957526

Comment:

  • 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.970036

datetime.strptime() 方法支持很多的格式化代碼, 比如 %Y 代表4位數年份, %m 代表兩位數月份。 還有一點值得注意的是這些格式化占位符也可以反過來使用,將日期輸出為指定的格式字符串形式。

本文參考《python3-codebook》

總結

以上是生活随笔為你收集整理的python数字处理技巧(2): Numpy、矩阵运算、随机、字符串日期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。