Python科学计算库Numpy数值运算基础详解(超详细 附源码)

简介: Python科学计算库Numpy数值运算基础详解(超详细 附源码)

需要完整PPT和代码文件请点赞关注收藏后评论区留言~~~

Numpy 是一个开源的Python 科学计算库,它是python 科学计算库的基础库,许多其他著名的库(如Pandas、 Scikit-learn 等)都要用到Numpy库的一些功能。Numpy常用的导入格式:import numpy as np

一、创建数组对象

NumPy库能将数据(列表、元组、数组或其他序列类型)转换为ndarray数组。

利用array函数创建数组对象

专门创建数组的函数

利用array()创建数组对象

import numpy as np
data1 = [1,3,5,7] #列表
w1 = np.array(data1)
print('w1:',w1)
data2 = (2,4,6,8) #元组
w2 = np.array(data2)
print('w2:',w2)
data3 = [[1,2,3,4],[5,6,7,8]] #多维数组
w3 = np.array(data3)
print('w3:',w3)

专门创建数组的函数

利用arange函数创建数组

array1 = np.arange(10)
print('array1:',array1)
array2 = np.arange(0,1,0.2)
print('array2:',array2)

利用linspace和logspace函数创建数组

logspace函数创造出来的是等比数列

array3= np.linspace(0,1,5)
array4 = np.logspace(0,1,5) 
#生成1-10间的具有5个元素的等比数列
print('array3:',array3)
print('array4:',array4)

zeros和ones函数用来创建指定长度或形状的全0或全1数组

print('1维值为0的数组:',np.zeros(4))
print('3*3维值为0的数组:\n',np.zeros([3,3]))
print('1维值为0的数组:',np.ones(5))
print('2*3维值为0的数组:\n',np.ones([2,3]))

diag函数创建类似对角矩阵,即对角线元素为0或者指定值,其他元素为0,full函数根据shape生成一个值全为val的矩阵

print('对角阵:\n',np.diag([1,2,3,4]))
print('指定大小和数值的矩阵:\n',np.full((2,3),6))

NumPy创建的ndarray对象属性,主要有shape、size等属性

查看数组的属性、设置shape属性及类型转换

warray = np.array([[1,2,3],[4,5,6]])
print('秩为:',warray.ndim)
print('形状为:',warray.shape)
print('元素个数为:',warray.size)
warray.shape = 3,2
print('设置shape后的数组:\n',warray)
print('原数组类型:',warray.dtype)
print('新数据类型',warray.astype(np.float64).dtype)

生成随机数

在NumPy.random模块中,提供了多种随机数的生成函数。如randint生成指定范围的随机整数。

用法:np.random.randint(low,high = None,size = None)

arr1 = np.random.randint(100,200,size = (2,4))
print('arr1:\n',arr1)
arr2 = np.random.rand(5)
print('arr2:\n',arr2)
arr3 = np.random.rand(3,2)
print('arr3:\n',arr3)

常用随机数生成函数如下

二、数组变换

数组重塑  

reshape ,与reshape相反的方法是数据散开(ravel)或数据扁平化(flatten)

arr1 = np.arange(12)
print('arr1:\n',arr1)
arr2=arr1.reshape(3,4)
print('arr2:\n',arr2)
arr3 = arr1.reshape(2,-1)
print('arr3:\n',arr3)

数据的散开与扁平化

arr1 = np.arange(12).reshape(3,4)
print('arr1:\n',arr1)
arr2 = arr1.ravel()
print('arr2:',arr2)
arr3 = arr1.flatten()
print('arr3:',arr3)

数组合并

完成数组的组合,包括数组的横向组合和纵向组合。NumPy利用hstack、vstack和concatenate函数完成数组的组合。横向组合利用hstack函数。纵向组合是利用vstack。concatenate函数可以实现数组的横向或纵向合并,参数axis = 1时进行横向合并,axis = 0时进行纵向合并。

arr1 = np.arange(6).reshape(3,2)
arr2 = arr1*2
arr3 = np.hstack((arr1,arr2))
print('横向合并:\n',arr3)
arr4 = np.vstack((arr1,arr2))
print('纵向合并:\n',arr4)
arr1 = np.arange(6).reshape(3,2)
arr2 = arr1*2
print('横向组合为:\n',np.concatenate((arr1,arr2),axis = 1))
print('纵向组合为:\n',np.concatenate((arr1,arr2),axis = 0))

数组分割

与数组合并相反,NumPy提供了hsplit、vsplit和split分别实现数组的横向、纵向和指定方向的分割。

arr = np.arange(16).reshape(4,4)
print('横向分割为:\n',np.hsplit(arr,2))
print('纵向组合为:\n',np.vsplit(arr,2))

数组转置和轴对换

数组转置是数组重塑的一种特殊形式,可以通过transpose方法进行转置。transpose方法需要传入轴编号组成的元组。

arr = np.arange(6).reshape(3,2)
print('矩阵:\n',arr)
print('转置矩阵:\n',arr.transpose((1,0)))

三、数组的索引和切片

一维数组的索引和切片 一维数组的切片和索引与python 的list 索引类似

arr = np.arange(10)
print(arr)
print(arr[2])
print(arr[-1])
print(arr[1:4])
arr1 = arr[-4:-1].copy()
print(arr)
print(arr1)

多维数组的索引 对于多维数组,它的每一个维度都有一个索引,各个维度的索引之间用逗号分隔。也可以使用整数函数和布尔值索引访问多维数组。

import numpy as np
arr = np.arange(12).reshape(3,4)
print(arr)
print(arr[0,1:3])  #索引第0行中第1列到第2列的元素
print(arr[:,2])   #索引第2列元素
print('索引结果1:',arr[(0,1),(1,3)])
#索引第1、2行中第0、2、3列的元素
print('索引结果2:',arr[1:2,(0,2,3)])
mask = np.array([1,0,1],dtype = np.bool)
#mask是一个布尔数组,它索引第0,2行中第1列元素
print('索引结果3:',arr[mask,1])

四、数组的运算

数组的运算支持向量化运算,将本来需要在Python级别进行的运算,放到C语言的运算中,明显地提高了程序的运算速度。

1. 数组和标量间的运算

a = [1,2,3]
b = []
for i in a:
    b.append(i*i)
print('b数组:',b)
wy = np.array([1,2,3])
c = wy*2
print('c数组:',c)

2. ufunc函数

常用的ufunc函数运算有四则运算、比较运算和逻辑运算。 np.any函数表示逻辑“or”,np.all函数表示逻辑“and”。

x = np.array([1,2,3])
y = np.array([4,5,6])
print('数组相加结果:',x+y)
print('数组相减结果:',x-y)
print('数组相乘结果:',x*y)
print('数组幂运算结果:',x**y)

ufunc函数也可以进行比较运算 返回的结果是一个布尔数组 其中每个元素都是对应元素的比较结果

x = np.array([1,3,6])
y = np.array([2,3,4])
print('比较结果(<):',x<y)
print('比较结果(>):',x>y)
print('比较结果(==):',x==y)
print('比较结果(>=):',x>=y)
print('比较结果(!=):',x!=y)

ufunc函数的广播机制

广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。

arr1 = np.array([[0,0,0],[1,1,1],[2,2,2]])
arr2 = np.array([1,2,3])
print('arr1:\n',arr1)
print('arr2:\n',arr2)
print('arr1+arr2:\n',arr1+arr2)

条件逻辑运算

在NumPy中可以利用基本的逻辑运算就可以实现数组的条件运算。

arr1 = np.array([1,3,5,7])
arr2 = np.array([2,4,6,8])
cond = np.array([True,False,True,False])
result = [(x if c else y)for x,y,c in zip(arr1,arr2,cond)]
print(result)

这种方法对大规模数组处理效率不高,也无法用于多维数组。NumPy提供的where方法可以解决这些问题。 where的用法:np.where(condition, x, y) 满足条件(condition),输出x,不满足则输出y。

print(np.where([[True,False], [True,True]],[[1,2], [3,4]],[[9,8], [7,6]]))
w = np.array([2,5,6,3,10])
print(np.where(w>4))

五、NumPy中的数据统计与分析

1. 排序   numpy.sort(a, axis, kind, order)

使用argsort和lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新的序列中的位置。

arr = np.array([7,9,5,2,9,4,3,1,4,3])
print('原数组:',arr)
arr.sort()
print('排序后:',arr)
arr = np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]])
print('原数组:\n',arr)
arr.sort(axis = 1)   #沿横向排序
print('横向排序后:\n',arr)
arr = np.array([7,9,5,2,9,4,3,1,4,3])
print('原数组:',arr)
print('排序后:',arr.argsort())
#返回值为数组排序后的下标排列
a=[2,5,8,4,3,7,6]
b=[9,4,0,4,0,2,1]
c=np.lexsort((a,b))
print(c)

2. 重复数据与去重

在数据统计分析中,需要提前将重复数据剔除。在NumPy中,可以通过unique函数找到数组中的唯一值并返回已排序的结果。

names = np.array(['红色','蓝色','黄色','白色','红色'])
print('原数组:',names)
print('去重后的数组:',np.unique(names))

3:数据重复

统计分析中有时需要把一个数据重复若干次 在Numpy中主要使用tile和repeat函数实现数据重复

arr = np.arange(5)
print('原数组:',arr)
wy = np.tile(arr,3)
print('重复数据处理:\n',wy) 
import numpy as np
arr1 = np.arange(5)
print('原数组:',arr1)
w1 = np.tile(arr1,3)
print('原数组重复3次:\n',np.tile(arr1,3))
arr2 = np.array([[1,2,3],[4,5,6]])
print('重复数据处理:\n',arr2.repeat(2,axis=0))

3.常用统计函数

NumPy中提供了很多用于统计分析的函数,常见的有sum、mean、std、var、min和max等。几乎所有的统计函数在针对二维数组的时候需要注意轴的概念。

arr = np.arange(20).reshape(4,5)
print('创建的数组:\n',arr)
print('数组的和:',np.sum(arr))
print('数组纵轴的和:',np.sum(arr,axis = 0))
print('数组横轴的和:',np.sum(arr,axis = 1))
print('数组的均值:',np.mean(arr))
print('数组横轴的均值:',np.mean(arr,axis = 1))
print('数组的标准差:',np.std(arr))
print('数组横轴的标准差:',np.std(arr,axis = 1))

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
142 5
|
24天前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
43 2
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
47 3
|
1月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
70 5
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
65 2
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
26 0
|
2月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
22 0
|
2月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
40 0
|
17天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!