Numpy支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
使用前安装该模块:使用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次幂开始升高