python算行列式的值 numpy库计算行列式_python必备模块

Numpy支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

官方:http://www.numpy.org/


使用前安装该模块:使用pycharm可以进入 Settings-> Project ->Project Interpreter -> 点击右侧,绿色加号

在出来的搜索框输入Numpy -> 点击下面的Install Package 等待提示安装成功即可。


基本属性:

import numpy as np
from numpy.linalg import *

lst = [[1, 3, 5], [2, 4, 6]]
print(type(lst))
np_lst = np.array(lst)
print(np_lst)
print(type(np_lst))  # 打印类型
np_lst = np.array(lst, dtype=np.float)
# bool int int8 int16 int32 int64 int128 uint8 uint16 uint32 uint64 uint128 float float16/32/64
print(np_lst.shape)  # 2行 3列 打印行列式的 规格
print(np_lst.ndim)  # 打印维度 2维
print(np_lst.dtype)  # 打印数据类型
print(np_lst.itemsize)  # 条目大小
print(np_lst.size)  # 大小

其他数组:

# 2 some arrays
print(np.zeros([2, 4]))  # 数值初始化一个2行4列的矩阵 全部0
print(np.ones([3, 5]))  # 数值初始化一个3行5列的矩阵 全部1
print('rand')
print(np.random.rand(2, 4))  # 随机数矩阵2行4列  0-1之间的 均匀生成
print(np.random.rand())  # 打印一个随机数
print('randint')
print(np.random.randint(1, 10))  # 1-10之间的整数
print(np.random.randint(1, 10, 3))  # 1-10之间的3个随机整数
print('randn')
print(np.random.randn())  # 正态分布的随机数
print(np.random.randn(2, 4))  # 正态分布的随机数 2行 4列
print('Choice')
print(np.random.choice([10, 20, 30]))  # 根据可迭代 指定值之间  只会出现 10 20 30 中的一个
print('Distribute')
print(np.random.beta(1, 10, 100))  # 生成白塔分布

操作:

# 操作
print(np.arange(1, 11))  # 生成一维数组 范围1-10
print(np.arange(1, 11).reshape([2, 5]))  # 生成一维数组 重生为2行5列的矩阵
print(np.arange(1, 11).reshape([2, -1]))  # 生成一维数组 重生为2行5列 5可以缺省

lst = np.arange(1, 11).reshape([2, -1])
print("指数", np.exp(lst))  # 指数操作
print("平方", np.exp2(lst))  # 指数操作 2的指数幂
print("开方", np.sqrt(lst))  # 指数操作 开方
print("正弦函数", np.sin(lst))  # 三角函数
print("对数", np.log(lst))  # 对数

lst2 = np.array([[[1, 2, 3, 4], [4, 5, 6, 7]],
                 [[7, 8, 9, 10], [10, 11, 12, 13]],
                 [[14, 15, 16, 17], [18, 19, 20, 21]]
                 ])

print(lst2.sum())  # 所有元素求和

print(lst2.sum(axis=0))  # 指定维数求和
# 对几维求和指定 axis 越大 越深入
# [[1, 2, 3, 4], [4, 5, 6, 7]] + [[7, 8, 9, 10], [10, 11, 12, 13]]+[[14, 15, 16, 17], [18, 19, 20, 21]]
# = [[22 25 28 31] [32 35 38 41]]
print(lst2.sum(axis=1))
# 对几维求和指定 axis 越大 越深入
# [1, 2, 3, 4] + [4, 5, 6, 7], [7, 8, 9, 10]+ [10, 11, 12, 13], [14, 15, 16, 17]+ [18, 19, 20, 21]
# =     [ 5  7  9 11]                [17 19 21 23]                       [32 34 36 38]
print(lst2.sum(axis=2))

print("max", lst2.max())  # 找出最大值
print("min", lst2.min())  # 找出最小值

数组间操作:

lst3 = np.array([10, 20, 30, 40])
lst4 = np.array([4, 3, 2, 1])
print(lst3 + lst4)  # 直接进行数组的相加
print(lst3 - lst4)  # 减法
print(lst3 * lst4)  # 乘法
print(lst3 / lst4)  # 除法
print(lst3 ** 2)  # 平法

矩阵操作:

print("两矩阵点乘", np.dot(lst3.reshape([2, 2]), lst4.reshape([2, 2])))  # 变成矩阵进行 点乘
print("追加", np.concatenate((lst3, lst4), axis=0))  # 追加 首尾追加
print("上下拼接", np.vstack((lst3, lst4)))  # 矩阵上下拼接
print("左右拼接", np.hstack((lst3, lst4)))  # 矩阵左右拼接
print("拆分矩阵", np.split(lst3, 2))  # 分开 分成两个矩阵

矩阵运算操作:

print("3*3单位矩阵", np.eye(3))  # 3*3单位矩阵
lst5 = np.array([[1, 2],
                 [3, 4]])
print("逆", inv(lst5))  # 求矩阵的逆
print("转置", lst5.transpose())  # 转置矩阵
print("行列式", det(lst5))  # 求行列式
print("特征值 特征向量", eig(lst5))  # 特征向量 打印出两个array 第一个是特征值  第二个是特征向量
lst6 = np.array([[5], [7]])  #
# [1]    [2]    [5]
# [3]x + [4]y = [7]   x=-3,y=4
print("解方程组", solve(lst5, lst6))  # 求解线性方程组

其他:

# 其他
print("信号处理", np.fft.fft(np.array([1, 1, 1, 1, 1, 1, 1, 1])))  # 信号处理
print("系数运算", np.corrcoef([1, 0, 1], [0, 2, 1]))  # 相关系数的运算
print("生成一元多次函数", np.poly1d([2, 1, 3]))  # 生成一元多次函数 x^2+x+3 = 从0次幂升高

 总结:

  • np.array(lst) 转变为该模块数组
  • np_lst 的shape(规格)、ndim(维度)、dtype(数据类型)、itemsize(条目大小)、size(大小)
  • np.zeros() 创建全0矩阵,np.ones()创建全1矩阵  括号内指定规格  例如:[2,4] 2行4列
  • np.random.rand()创建随机数或随机矩阵,0-1之间的数。例如:np.random.rand(2,4) 2行4列 、np.random.rand() 一个随机数
  • np.random.randint() 创建随机数或随机矩阵。例如:np.random.randint(1,10) 产生一个1-10之间的随机整数、np.random.randint(1,10,4)产生3个1-10之间的随机整数
  • np.random.randn()创建正态分布随机数或矩阵。例如:np.random.randn() 产生1个随机数、np.random.randn(2,4)创建正态分布矩阵2行4列
  • np.random.choice(array) 从array中随机选择一个数。array是一个可迭代对象
  • np.random.beta()创建一个贝塔分布矩阵。例如:np.random.beta(1,10,100) 产生100个1-10之间的符合贝塔分布的随机数

  • np.arange() 遍历创建一维数组。例如:np.arange(1-11)遍历创建一个1维数组,范围1-10之间的数。
  • np.arange(a,b).reshape()将创建的一维数组,进行重塑。例如:np.arange(1,11).reshape([2,5])将一维数组,重新生成一个2行5列的数组

  • np.exp() 是返回e的n次方,e为2.71828。
  • np.exp2() 是返回2的n次方。
  • np.sqrt() 是返回开方。
  • np.sin() 是返回正弦函数
  • np.log() 是返回对数
  •  

  • lst.sum() 数组元素求和
  • lst.sum(axis=n) 对于多维数组求和,n越大表示维度越大,越深入

  • lst.max() 找到最大值
  • lst.min() 找到最小值
  • lst1=np.array([1,2,3]),lst2=np.array([4,5,6]) lst1与lst2可以直接进行:加法、减法、乘法、除法、平方等运算。
  • np.dot(lst1,lst2) 两矩阵进行点乘
  • np.concatenate((lst1,lst2),axis=0) 两矩阵首尾追加
  • np.vstack((lst1,lst2)) 两矩阵上下拼接
  • np.hstack((lst1,lst2)) 两矩阵左右拼接
  • np.split(lst,2)  将矩阵分为2个矩阵

  • np.eye(3) 生成3阶单位矩阵
  • inv(lst) 其中lst为矩阵 求矩阵的逆
  • lst.transpose() 求转置矩阵
  • det(lst) 其中lst为行列式 求行列式
  • eig(lst) 求特征值和特征向量
  • solve(lst1,lst2) 求解线性方程组

  •  np.fft.fft(array) 信号处理
  •  np.corrcoef(array) 相关系数
  • np.poly1d(array) 生成一元多次函数 从0次幂开始升高