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、切片索引、布尔索引
# 导入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模块提供的现成自然对数函数
# 导入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()
# 导入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)产生相同的随机数序列
9、常用分布的产生方式
# 导入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]]
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本