Python之復數、分數、大型數組數學運算(complex、cmath、numpy、fractions)


一、復數的數學運算
復數可以用使用函數 complex(real, imag) 或者是帶有后綴j的浮點數來指定
a=complex(2,4)
print(a)   # (2+4j)
b=2-5j
# 獲取對應的實部、虛部和共軛復數
print(b.real,b.imag,b.conjugate())  # 2.0 -5.0 (2+5j)
# 數學運算
print(a+b)  # (4-1j)
print(abs(a))  # 4.47213595499958
復數函數比如正弦、余弦或平方根,使用 cmath 模塊
import cmath
print(cmath.sin(a))
print(cmath.cos(a))
print(cmath.exp(a))
# (24.83130584894638-11.356612711218173j)
# (-11.36423470640106-24.814651485634183j)
# (-4.829809383269385-5.5920560936409816j)
使用 numpy 也可以處理復數
# 構造復數數組
import numpy as np
c=np.array([1+2j,2+3j,3+4j])
print(c)  # [ 1.+2.j  2.+3.j  3.+4.j]
print(c+2)  # [ 3.+2.j  4.+3.j  5.+4.j]
print(np.sin(c))  # [ 3.16577851 +1.95960104j  9.15449915 -4.16890696j  3.85373804-27.01681326j]

補充:

# Python的標准數學函數確實情況下並不能產生復數值,必須使用cmath
print(cmath.sqrt(-1))  # 1j
二、分數運算
fractions 模塊可以被用來執行包含分數的數學運算
from fractions import Fraction
a=Fraction(1,3)
b=Fraction(1,4)
print(a,b,a+b)  # 1/3 1/4 7/12
c=a*b
print(c)  # 1/12
三、大型數組運算
首先了解:標准列表對象和 NumPy 數組對象之間的差別
標准列表對象:
x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
print(x * 2)  # [1, 2, 3, 4, 1, 2, 3, 4]
# print(x + 10)   # 報錯了TypeError: can only concatenate list (not "int") to list
print(x + y)  # [1, 2, 3, 4, 5, 6, 7, 8]

 

Numpy arrays
import numpy as np
ax = np.array([1, 2, 3, 4])
ay = np.array([5, 6, 7, 8])
print(ax * 2)  # array([2, 4, 6, 8])
print(ax + 10)  # array([11, 12, 13, 14])
print(ax + ay)  # array([ 6, 8, 10, 12])
print(ax * ay)  # array([ 5, 12, 21, 32])
計算多項式的值,即每個列表元素進行多項式運算
def f(x):
    return 3*x**2 - 2*x + 7

print(f(ax))   # [ 8 15 28 47]
多維數組,索引問題, 列表基層嵌套,就是幾維數組 ,索引:逗號分不同維度的
# eg  (1:3,2:3) 二維數組中取第一層索引1到3,再取索引1到3列表中索引的2:4
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])  # 二維數組
print(a[1:3,1:3])  # [[ 6  7] [10 11]]
print(a[:,1])  # [ 2  6 10]
print(a+2)  # [[ 3  4  5  6] [ 7  8  9 10] [11 12 13 14]]
補充:numpy 優勢:numpy中的函數要比循環數組並使用 math 模塊中的函數執行計算要快的多
 
       


免責聲明!

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



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