Python科學計算----Numpy


Python科學計算----Numpy

Numpy 是一個專門用於矩陣化運算、科學計算的開源Python

NumPy將Python相當於變成一種免費的更強大的Matlab系統
(1)強大的 ndarray 多維數組結構
(2)成熟的函數庫
(3)用於整合C/C++和Fortran代碼的工具包
(4)實用的線性代數、傅里葉變換和隨機數模塊
(5)Numpy 和稀疏矩陣運算包scipy 配合使用非常方便

1、基本數據結構 ndarray

矩陣表示:使用Numpy,易得到二維矩陣

# 導入numpy
import numpy as np

# 構建多維數組
arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr)
print(type(arr))
# 結果
[[1 2 3]
 [4 5 6]]
<class 'numpy.ndarray'>

# 獲取數據
print(arr[0]) # [1 2 3]

# 修改數據
arr[0] = 0
print(arr)
# 結果
[[0 0 0]
 [4 5 6]]

# 切片
# 取出第二列  ::表示所有行
print(arr[::, 1]) # [0 5]

# 重新賦值
# 從開頭到第二列賦值為0
arr[:, :2] = 0
print(arr)
# 結果
[[0 0 0]
 [0 0 6]]

2、切片索引、布爾索引

image

# 導入numpy
import numpy as np
# 定義一個Numpy
arr = np.array(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)

# 切片索引

# 取出矩陣中的5
print(arr[1, 1])

# 取出矩陣中的3、6、9
print(arr[::, 2]) # 所有行、第3列

# 取出123、789
print(arr[::2, ::]) # 行步長為2、列從頭到尾
============================================================
# 布爾索引, 返回為true位置的數據
# 取出大於4的數據
print(arr[arr > 4])  # [5 6 7 8 9]

# 取出矩陣中的奇數
print(arr % 2 == 1)
# 結果
[[ True False  True]
 [False  True False]
 [ True False  True]]

# 對ndarray的計算相當於是對里面的數據的計算
print(arr[arr % 2 == 1])
# [1 3 5 7 9]
===========================================================
# 計算
# 計算

arr = np.array(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)
print(arr ** 2 - 1)
# 結果
[[ 0  3  8]
 [15 24 35]
 [48 63 80]]

3、對位運算

# 導入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])
arr2 = np.array([[3, 3, 3], [4, 4, 4]])

# 對應位置進行計算
print(arr1 + arr2)
# 結果
[[4 4 4]
 [6 6 6]]

print(arr1 - arr2)
# 結果
[[-2 -2 -2]
 [-2 -2 -2]]

print(arr1 * arr2)
# 結果
[[3 3 3]
 [8 8 8]]

print(arr1 / arr2)
# 結果
[[0.33333333 0.33333333 0.33333333]
 [0.5        0.5        0.5       ]]

# 整除//
print(arr1 // arr2)
# 結果
[[0 0 0]
 [0 0 0]]

# 取余
print(arr1 % arr2)
# 結果
[[1 1 1]
 [2 2 2]]

print(arr1 ** arr2)
# 結果
[[ 1  1  1]
 [16 16 16]]

4、重構---通過 reshape 方法將所有元素按照指定行指定列進行重構

# 導入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])

# 重構
# 本次定義的矩陣只能重構成3行2列、2行3列、1行6列、6行1列
print(arr1.reshape((3, 2)))
# 結果
[[1 1]
 [1 2]
 [2 2]]

print(arr1.reshape((2, 3)))
print(arr1.reshape((6, 1)))
print(arr1.reshape((1, 6)))

5、拼接

通過 vstack 沿縱軸拼接
通過 hstack 沿橫軸拼接
通過 concatenate 進行拼接

# 導入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])
arr2 = np.array([[3, 3, 3], [4, 4, 4]])

# 縱向拼接
print(np.vstack((arr1, arr2)))
# 結果
[[1 1 1]
 [2 2 2]
 [3 3 3]
 [4 4 4]]

# 橫向拼接
print(np.hstack((arr1, arr2)))
# 結果
[[1 1 1 3 3 3]
 [2 2 2 4 4 4]]

6、轉置、翻轉

# 導入numpy
import numpy as np

arr1 = np.array([[1, 1, 1], [2, 2, 2]])
arr2 = np.array([[3, 3, 3], [4, 4, 4]])

print(arr1)
# 結果
[[1 1 1]
 [2 2 2]]

# 將arr1轉置
print(arr1.T) 
# 結果
[[1 2]
 [1 2]
 [1 2]]

# 將arr1左右翻轉
print(np.fliplr(arr1)) 
# 結果
[[1 1 1]
 [2 2 2]]

# 將arr1上下翻轉
print(np.flipud(arr1))  
# 結果
[[2 2 2]
 [1 1 1]]

7、內置操作函數

1、數學函數

numpy.log()函數是numpy模塊提供的現成自然對數函數

image

# 導入numpy
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
# 自然對數
print(np.log(arr1))
# 結果
[[0.         0.69314718 1.09861229]
 [1.38629436 1.60943791 1.79175947]]
2、運算函數

在計算的時候,會用到差分、累加的情況。Numpy提供很多相關的運算函數

# 導入numpy
import numpy as np

arr1 = np.array([1, 4, 6, 8, 0, 1])
# 差分:兩數之間取差
print(np.diff(arr1))
# 結果
[ 3  2  2 -8  1]

對於二維矩陣,需要指明是對哪一個維度進行差分

# 導入numpy
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

# axis :方向   axis=0 縱向,axis=1 橫向
print(np.diff(arr1, axis=1))
# 結果
[[1 1]
 [1 1]]
3、統計函數

numpy提供了很多計算最大值、最小值、均值、中位數等統計量的函數,

比如統計最大值的函數numpy.amax()

image

# 導入numpy
import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

print(np.amax(arr1, axis=1))  # 最大值
# 結果
[3 6]

print(np.std(arr1, axis=1))  # 標准差
# 結果
[0.81649658 0.81649658]

8、隨機模塊random

• 偽隨機數的產生,可從離散分布和連續分布中產生

• 在蒙特卡洛方法、隨機積分、隨機過程模擬等很多方面都有應用
• 指定隨機種子(seed)產生相同的隨機數序列

image

9、常用分布的產生方式

image

# 導入numpy
import numpy as np

# 隨機生成滿足10乘5的正太分布數據
print(np.random.normal(size=(10, 5)))
# 結果
[[ 0.32878953  0.71197857  1.4588738   1.31069034 -1.17416894]
 [ 1.02082204  1.41527355 -0.28873512 -0.98912335 -1.25771646]
 [-1.27440505  2.84689987 -0.70494075  0.05973663 -0.52115097]
 [ 0.32383528  0.04148195  0.73268786 -0.0838266   0.3542903 ]
 [-1.80250937  0.16319989 -0.85771618 -0.08209453  0.64317038]
 [ 0.22995207 -0.11308609  1.85361257  0.61643364  0.69046163]
 [-1.02848903 -0.85376927  1.30259009 -0.56901766 -0.36592106]
 [-1.19991749  0.85722885 -0.15820272 -1.11556772 -0.55697908]
 [ 0.87993598 -0.87994843  0.19990547  1.92109329 -1.29323607]
 [-0.40084441  0.57890668 -0.65851584 -0.19371564 -0.26126436]]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM