网站电子地图怎么做,做软件开发视频网站,网页设计6种布局方式,链友之家文章目录 一、科学计算介绍二、NumPy2.1、NumPy是什么2.2、NumPy使用场景2.3、NumPy特点2.4、NumPy如何使用 三、数组3.1、数组介绍3.2、创建数组3.3、数组的大小3.4、通过索引访问数组3.5、变换数组的形态3.6、常用的ufunc运算 一、科学计算介绍 python语言提供了array模块与列表不同array能直接保存数据和C语言的一维数组类似但由于array模块不支持多维数组也没有各种运算函数因此它不适合做数值运算。 Python具有丰富的库和工具可以用于处理各种数学、科学和工程问题。以下是一些常用的Python科学计算库 NumPyNumerical Python提供了高性能的多维数组对象和用于处理数组的工具。SciPyScientific Python基于NumPy提供了许多科学计算功能如线性代数、优化、积分等。pandas提供了数据处理和分析的功能如数据清洗、数据转换、数据聚合等。Matplotlib用于绘制图表和可视化数据的库。Jupyter Notebook交互式编程环境可以方便地编写和共享代码。
二、NumPy
2.1、NumPy是什么 NumPy是一个用于科学计算的Python库它提供了多维数组对象、数学函数库以及整合C/C/Fortran代码的工具。 NumPy的核心是ndarray对象该对象封装了n维同类数组。与Python标准序列不同NumPy数组在创建时有固定大小且数组中的元素必须是同一数据类型。 2.2、NumPy使用场景
科学计算 线性代数运算如矩阵乘法、求逆和特征值分解。微分和积分计算用于求解复杂数学问题。信号处理例如傅里叶变换和滤波器设计。 机器学习 神经网络构建利用NumPy进行高效的矩阵运算。数据预处理包括归一化和标准化操作。实现各种机器学习算法如支持向量机和K近邻算法。 图像处理 图像的读取、写入和显示以及基本的图像转换操作。图像滤波和增强如平滑和锐化处理。高级图像分析例如边缘检测和目标识别。 数据分析 数据清洗和转换确保数据质量。统计分析包括均值、标准差和协方差计算。数据可视化结合Matplotlib生成图表。 金融工程 模拟金融市场数据如股票价格和收益率。风险管理计算VaR和其他金融指标。资产定价模型的构建和测试。 工程仿真 有限元分析和流体动力学模拟。优化问题的求解如结构设计和参数调整。高性能计算通过并行化提高计算效率。
2.3、NumPy特点
多维数组对象NumPy的核心数据结构是ndarray它是一个多维数组用于存储同质数据类型的元素。这种多维数组非常适合向量化操作和矩阵运算可以是一维、二维、三维等。广播功能NumPy允许在不同形状的数组之间执行操作通过广播机制它能够自动调整数组的形状以使操作有效。这项功能极大地增强了NumPy的灵活性和计算效率避免了手动编写循环的繁琐工作。丰富的数学函数库NumPy提供了大量的数学、统计和线性代数函数包括基本的加减乘除、三角函数、指数和对数函数、随机数生成以及矩阵操作等。这些函数极大地方便了各种科学计算任务的实现。高性能计算NumPy的底层实现是用C语言编写的因此在处理大规模数据时非常高效。与其他高性能计算库如BLAS和LAPACK集成提供了快速的线性代数运算。由于释放了Python的GIL全局解释器锁NumPy在进行数组操作时可以实现并行计算。互操作性NumPy可以与许多其他Python库和数据格式无缝集成例如Pandas、SciPy和Matplotlib等。这使得数据科学工作流更加流畅从而为数据分析人员、科学家和工程师提供了一个功能强大且高效的工具。
2.4、NumPy如何使用
安装NumPy 通过Anaconda终端安装是较为便捷的一种方式。打开Anaconda终端创建一个新的虚拟环境例如名为NumpyTest激活该环境然后使用pip install numpy命令进行安装。 对于网络问题导致的安装困难可以考虑切换至国内镜像源如清华园镜像。 创建数组 一维数组可以通过np.array([1, 2, 3, 4])的方式创建。这会生成一个包含这些元素的数组。二维数组或矩阵的创建方式类似如np.array([[1, 2, 3], [4, 5, 6]])会生成一个2x3的矩阵。np.zeros((5, 3))会创建一个5行3列、所有元素为0的数组。相反np.ones((5, 3))会创建一个所有元素为1的同样维度的数组。np.empty((5, 3))则创建一个所有元素初始值为无限小接近于0的数组。np.arange(10, 16, 2)会生成一个从10到14不包括16步长为2的数组。np.linspace(1, 10, 20)则会在1到10之间均匀地生成20个数值组成的数组。使用np.random.rand(3, 3)可以创建一个3x3的随机数组每个元素值在0到1之间。 数组运算 NumPy支持向量化操作可以直接对数组执行逐元素运算如c a * b即实现了两个数组的逐元素乘法。广播机制允许不同形状的数组进行运算小数组会扩展到大数组的形状。例如一个1维数组与一个2维数组相加时1维数组会自动扩展成2维数组的形状后再进行运算。 数学函数 NumPy提供了丰富的数学函数如np.sin()、np.cos()、np.exp()等可以直接对数组进行操作。线性代数运算也非常便捷例如矩阵乘法可以使用np.dot(A, B)实现。 索引切片 通过索引和切片操作可以轻松访问和修改数组中的元素。例如arr[0]会返回数组的第一个元素而arr[:, 1]会返回所有行第二列的元素。高级索引如arr[[0, 1], [2, 3]]允许更复杂的元素选择。 性能计算 NumPy底层用C语言编写并集成了BLAS和LAPACK等高性能计算库特别适合处理大规模数据。释放Python的GIL全局解释器锁在进行数组操作时可以实现并行计算进一步提高性能。 互操作性 NumPy可以与Pandas、SciPy和Matplotlib等多个Python库无缝集成使得数据处理和分析工作流更加流畅。
三、数组
3.1、数组介绍 Python中的数组是一种用于存储有序数据集合的数据结构其主要类型包括列表list、元组tuple和字典dictionary。 列表 定义和初始化列表是可变数组支持动态增加元素。例如可以定义一个列表arr [1, 2, 3]。索引和切片通过索引访问特定元素如arr[0]获取第一个元素。切片操作如arr[1:3]获取从第二个到第三个元素之间的子列表。修改元素可以直接修改列表中的元素如arr[0] 10将第一个元素改为10。遍历和迭代使用for循环或enumerate()函数遍历列表中的元素如for i, v in enumerate(arr): print(i, v)。添加和删除元素append()方法可以在列表末尾添加元素而insert()方法可以在指定位置插入元素。pop()和remove()方法分别用于删除指定位置和首个匹配的元素。 元组 定义和不可变性元组一旦创建其元素不能更改。例如可以定义一个元组t (“a”, “b”, “c”)。索引和切片与列表类似但不允许修改元素。例如t[0]获取第一个元素t[1:3]获取第二和第三个元素的子元组。遍历和迭代可以使用for循环遍历元组中的元素如for i in t: print(i)。用做字典键由于元组是不可变的它们可以用作字典的键而列表则不行。 字典 定义和初始化字典存储键值对如d {‘a’: 1, ‘b’: 2, ‘c’: 3}。访问和修改值通过键访问和修改对应的值如d[‘a’]获取键’a’的值而d[‘a’] 10将键’a’的值改为10。遍历和迭代遍历字典的键、值或键值对如for k, v in d.items(): print(k, v)。添加和删除键值对直接赋值可以添加新的键值对而del语句或pop()方法用于删除键值对。
3.2、创建数组 ndarray是NumPy提供的用于存储单一数据类型的多维数组NumPy提供了array函数可以创建一维或多维数组。 一维数组 一维数组是由数字组成排序单纯结构单一的数组python提供了列表和元组来实现一维数组的存储。 import numpy as np
# 创建一个一维数组
arr np.array([1, 2, 3, 4, 5])
# 打印数组
print(arr)D:\pythonLED\python.exe E:/pythonProject/1.py
[1 2 3 4 5]二维数组 二维数组在python中同样可以用列表和元组来表示。 import numpy as np
# 创建一个二维数组
arr np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 打印数组
print(arr)D:\pythonLED\python.exe E:/pythonProject/1.py
[[1 2 3][4 5 6][7 8 9]]数组形状变更 数组和python的列表有所不同他提供了更多的操作数组的shape属性是可以写的可以通过修改数组的shape属性在保持数组元素不变的情况下改变数组每个轴的长度。 import numpy as np
# 创建一个一维数组
arr np.array([1, 2, 3, 4, 5, 6])
# 将一维数组转换为二维数组形状为(2, 3)
new_arr arr.reshape((2, 3))
print(原始数组)
print(arr)
print(新形状的数组)
print(new_arr)D:\pythonLED\python.exe E:/pythonProject/1.py
原始数组
[1 2 3 4 5 6]
新形状的数组
[[1 2 3][4 5 6]]等差序列 NumPy提供了两个函数来创建等差序列np.arange函数类似python自带的range函数通过指定开始值终值和步长来创建一维数组创建的数组不含终值np.linspace函数通过指定开始值终值和元素个数来创建一维 # 使用列表推导式生成等差序列
def generate_arithmetic_sequence(start, end, step):return [x for x in range(start, end, step)]
# 使用循环生成等差序列
def generate_arithmetic_sequence_loop(start, end, step):sequence []while start end:sequence.append(start)start stepreturn sequence
# 测试
print(generate_arithmetic_sequence(1, 10, 2))
print(generate_arithmetic_sequence_loop(1, 10, 2))D:\pythonLED\python.exe E:/pythonProject/1.py
[1, 3, 5, 7, 9]
[1, 3, 5, 7, 9]等比序列 NumPy提供np.geomspace函数创建等比序列。 def geometric_sequence(a, r, n):return [a * (r ** i) for i in range(n)]
# 生成一个初始值为1公比为2长度为5的等比序列
sequence geometric_sequence(1, 2, 5)
print(sequence) D:\pythonLED\python.exe E:/pythonProject/1.py
[1, 2, 4, 8, 16]单位矩阵 单位矩阵是指主对角线上的元素为1其他元素为0的二维数组。 import numpy as np
identity_matrix np.eye(3)
print(identity_matrix)D:\pythonLED\python.exe E:/pythonProject/1.py
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]对角线矩阵 对角线矩阵中除主对角线以外其他元素都为0主对角线的元素可以为0或其他值。 import numpy as np
diagonal_elements [1, 2, 3]
matrix np.diag(diagonal_elements)
print(matrix)D:\pythonLED\python.exe E:/pythonProject/1.py
[[1 0 0][0 2 0][0 0 3]]随机数组 python自带了一个random模块用来生成随机数但是random模块的函数每次只能生成一个随机数。 import random
# 创建一个包含5个随机整数的数组整数范围为1到10
random_array [random.randint(1, 10) for _ in range(5)]
print(random_array)D:\pythonLED\python.exe E:/pythonProject/1.py
[2, 7, 6, 8, 1]3.3、数组的大小 NumPy除了使用shape属性来表示数组的形状外还提供了几种属性来表示数组的大小。 属性说明ndim表示数组的维数shape表示数组的形状对于n行m列的矩阵shape(nm)size表示数组的元素个数itemsize表示数组中单个元素的大小
import numpy as np
# 创建一个二维数组
arr np.array([[1, 2, 3], [4, 5, 6]])
# 使用 ndim 属性获取数组的维度
dimensions arr.ndim
print(数组的维度为, dimensions)D:\pythonLED\python.exe E:/pythonProject/1.py
数组的维度为 2import numpy as np
# 创建一个一维数组
arr1 np.array([1, 2, 3, 4, 5])
print(一维数组的大小, arr1.size) # 输出5
# 创建一个二维数组
arr2 np.array([[1, 2, 3], [4, 5, 6]])
print(二维数组的大小, arr2.size) # 输出6D:\pythonLED\python.exe E:/pythonProject/1.py
一维数组的大小 5
二维数组的大小 6import numpy as np
# 创建一个一维数组
arr np.array([1, 2, 3, 4, 5])
# 获取数组中每个元素的字节大小
item_size arr.itemsize
print(每个元素的字节大小, item_size)D:\pythonLED\python.exe E:/pythonProject/1.py
每个元素的字节大小 83.4、通过索引访问数组
一维数组
import numpy as np
# 创建一个一维数组
arr np.array([1, 2, 3, 4, 5])
# 通过整数索引访问数组中的元素
print(arr[0]) # 输出1
print(arr[2]) # 输出3
# 通过切片访问数组的一部分
print(arr[1:4]) # 输出[2 3 4]
print(arr[:3]) # 输出[1 2 3]
print(arr[2:]) # 输出[3 4 5]D:\pythonLED\python.exe E:/pythonProject/1.py
1
3
[2 3 4]
[1 2 3]
[3 4 5]多维数组
import numpy as np
# 创建一个二维数组
arr_2d np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(二维数组)
print(arr_2d)
# 通过索引访问二维数组的元素
print(访问第1行第2列的元素, arr_2d[0, 1])
# 创建一个三维数组
arr_3d np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]])
print(三维数组)
print(arr_3d)
# 通过索引访问三维数组的元素
print(访问第1个矩阵的第2行第3列的元素, arr_3d[0, 1, 2])D:\pythonLED\python.exe E:/pythonProject/1.py
二维数组
[[1 2 3][4 5 6][7 8 9]]
访问第1行第2列的元素 2
三维数组
[[[ 1 2 3][ 4 5 6][ 7 8 9]][[10 11 12][13 14 15][16 17 18]]]
访问第1个矩阵的第2行第3列的元素 6Process finished with exit code 03.5、变换数组的形态 NumPy除了提供直接修改shape属性的方法来改变数组的形状外还提供了reshape函数来改变数组的形状reshape函数不会改变原始数组的形状新生成的数组与原始数组共享一块数据存储空间。 import numpy as np
# 创建一个一维数组
arr np.array([1, 2, 3, 4, 5, 6])
# 使用reshape()函数将一维数组转换为二维数组
reshaped_arr arr.reshape((2, 3))
print(原始数组)
print(arr)
print(变换后的数组)
print(reshaped_arr)D:\pythonLED\python.exe E:/pythonProject/1.py
原始数组
[1 2 3 4 5 6]
变换后的数组
[[1 2 3][4 5 6]]3.6、常用的ufunc运算 ufunc运算是NumPy库中的一个概念它表示通用函数universal function。ufunc是一种能够对数组中的每个元素进行操作的函数它允许你在整个数组上执行元素级别的操作而无需使用循环。ufunc具有广播功能可以自动处理不同形状的数组之间的操作。这使得ufunc在处理大量数据时非常高效。 矩阵的四则运算
import numpy as np
arr np.array([1, 2, 3, 4, 5])
add_result np.add(arr, 2)
print(add_result) # 输出[3 4 5 6 7]
subtract_result np.subtract(arr, 2)
print(subtract_result) # 输出[-1 0 1 2 3]
multiply_result np.multiply(arr, 2)
print(multiply_result) # 输出[ 2 4 6 8 10]
divide_result np.divide(arr, 2)
print(divide_result) # 输出[0.5 1. 1.5 2. 2.5]D:\pythonLED\python.exe E:/pythonProject/1.py
[3 4 5 6 7]
[-1 0 1 2 3]
[ 2 4 6 8 10]
[0.5 1. 1.5 2. 2.5]矩阵的比较运算
import numpy as np
A np.array([[1, 2], [3, 4]])
B np.array([[4, 3], [2, 1]])
result np.greater(A, B)
print(result)D:\pythonLED\python.exe E:/pythonProject/1.py
[[False False][ True True]]逻辑运算
import numpy as npA np.array([[1, 0, 1],[0, 1, 0],[1, 1, 0]])B np.array([[1, 1, 0],[0, 1, 1],[1, 0, 0]])
C np.logical_and(A, B)
print(C)D:\pythonLED\python.exe E:/pythonProject/1.py
[[ True False False][False True False][ True False False]]NumPy提供了三角函数、随机和概率分布、基本数值统计、傅里叶变换、矩阵运算等丰富的函数运算。