Python numpy库の矩阵、数列(等差、等比)
numpy库
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
介绍
一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
Code of practice
import numpy as np
import datetime
# 获取当前时间, 其中中包含了year, month, hour, 需要import datetime
today = datetime.date.today()
print(today) # 2019-04-25
print(today.year) # 2019
print(today.month) # 4
print(today.day) # 25
# 创建 ndarray 对象的函数,可以很方便的创建常用的或有规律的矩阵
# arange 非 arrange
a = np.arange(10) # 默认从0开始到10(不包括10),步长为1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]
b = np.arange(5, 10) # 从5开始到10(不包括10),步长为1
print(b) # 返回 [5 6 7 8 9]
c = np.arange(6, 15, 3) # 从6开始到15(不包括15),步长为3
print(c) # 返回 [ 6, 9, 12]
# linspace用于生成等差数列
d = np.linspace(0, 10, 4) # 生成首位是0,末位是10,含4个数的等差数列
print(d) # [ 0. 3.33333333 6.66666667 10. ]
# logspace用于生成等比数列
e = np.logspace(0, 2, 5) # 用于生成首位是100,末位是102,含5个数的等比数列
print(e)
# [ 1. 3.16227766 10. 31.6227766 100. ]
f_one = np.ones((3, 4)) # 创建3*4的全1矩阵
print(f_one)
f_zero = np.zeros((3, 4)) # 创建3*4的全0矩阵
print(f_zero)
f_eye = np.eye(5) # 创建5阶单位矩阵
print(f_eye)
f_empty = np.empty((2, 3)) # 创建2*3的空矩阵
print(f_empty)
# [[1.26785536e-311 1.26784911e-311 1.26784911e-311]
# [4.83245960e+276 3.09394663e+169 9.08367217e+223]]
# 手动创建矩阵时注意[ [ 的数量 ] ]
g = np.array([[1, 2, 3], [4, 5, 6]])
h = np.array([[2, 3, 4], [5, 6, 7]])
# 都是对矩阵对应元素间的运算
print(g + h)
print(g - h)
print(g * h)
print(g / h)
print(g % h)
print(g ** 2)
# 对矩阵a中每个元素取正弦,sin(x) 还有其他的函数
print( np.sin(g) )
# 矩阵中的元素不在定义域范围内,会产生RuntimeWarning,结果为nan(not a number)
# 矩阵乘法(点乘)dot函数
j = np.array([ [1, 2, 3], [4, 5, 6] ])
k = np.array([ [1, 2], [3, 4], [5, 6] ])
print(j.shape[1]) # 获得行数
print(k.shape[0]) # 获得列数
print(j.shape[1] == k.shape[0])
print(j.dot(k))
# 矩阵的转置 j.transpose() j.T
print(j.transpose())
print(j.T)
# 矩阵的逆
m = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # 理论上只有方阵可求逆
print(np.linalg.inv(m))
print('Check')
# 矩阵最值,另有均值、方差、标准差、中值、求和、累积和
print(m.max()) # 矩阵最大值
print(m.min())
print(m.max(axis = 0)) # 每行的最大值
print(m.max(axis = 1)) # 每列的最大值
print(m.min(axis = 0))
print(m.min(axis = 1))
print(m.argmax()) # 最大值所在位置
print(m.argmin())
print(m.argmax(axis = 0))
print(m.argmax(axis = 1))
print(m.argmin(axis = 0))
print(m.argmin(axis = 1))