python学习——NumPy数值计算基础

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: NumPy基础知识概览:涉及nan(非数字)和inf(无穷)的概念,nan在文件读取或不适当计算时出现,inf在除0操作中出现。数组操作有深拷贝(a=b.copy())、浅拷贝(a=b[:])和引用(a=b)。创建数组方式多样,如`np.array()`、`np.arange()`等。数据类型转换如`np.float64()`、`np.int8()`。随机数生成包含均匀分布、正态分布等。数组索引和切片支持多维操作。改变数组形状用`reshape()`,展平用`ravel()`和`flatten()`。矩阵运算包括加减乘、转置、逆矩阵等。

NumPy数值计算基础

nan:不是一个数,0除0,属于float类型
inf:无限,3除0

nan(NAN,Nan): not a number表示不是一个数字
什么时候numpy中会出现nan:
  当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
  当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
什么时候回出现inf包括(-inf,+inf)
  比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)

  1. a=b 完全不复制,a和b相互影响
  2. a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
  3. a = b.copy(),复制,a和b互不影响

9c5f2e7df14c4e70a64538bf24021d15.png

e83028c583164c79a7d28c36323eabb1.png

61eb06bd02714c5292a8c7edde2cd251.png

1.array创建数组及其属性

import numpy as np 
ar=np.array([[1.2,8,5,8],[1,3,5,2],[5,24,7,7]])
print(ar)
print(ar.shape)    #数组结构
print(ar.dtype)    #数组类型
print(ar.size)     #数组元素个数
print(ar.itemsize) #数组每个元素大小

2.其他创建方式

np.arange(0,1,0.1)     # 0到1,不包括1,间隔为0.1
np.linspace(0, 1, 12)  #0到1生成12个数
np.logspace(0, 2, 20)) #1(102)到100(102)之间,20个等比数列
np.zeros((2,3)         #2x3零矩阵
np.eye(3)              #单位矩阵
np.diag([1,2,3,4]))    #对角阵
np.ones((5,3)))        #所有元素都为1

3.数据类型及其转换

np.float64(42)  #整型转换为浮点型
np.int8(42.0)   #浮点型转换为整型
np.bool(42)     #整型转换为布尔型
np.bool(0)      #整型转换为布尔型
np.float(True)  #布尔型转换为浮点型
np.float(False) #布尔型转换为浮点型
#创建一个餐饮数据库
import numpy as np
df = np.dtype([("name", np.str_, 40), ("numitems", np.int64),
    ("price",np.float64)])#创建数据类型
its=np.array([("tomato",42,5.4),("potato",50,6.6)])#定义数组数据
print('数据类型为:',df["name"])
print('数据类型为:',np.dtype(df["name"]))
print('自定义数据为:',its)

4.生成随机数

在这里插入图片描述

np.random.random(100) 
np.random.rand(10,5)                  #均匀分布的随机数
np.random.randn(10,5))                #正态分布的随机数
np.random.randint(2,10,size =[2,5]))#不小于2,不大于10的2行5列数组

5.数组的索引和切片

import numpy as np
a=np.arange(12).reshape(3,4)
print(a[[0,2],[1,3]])#取相应位置的四个元素
print(a[0:2,1:3])#取行和列的元素
a[a<4]=2 #布尔运算
a[a>5]=0
np.where(a<5,0,1) #三元运算符
b=a.clip(2,3)#小于1的替换为10,大于1的替换为了18
print(a)
print(b)

一维数组

arr[5]      #用整数作为下标可以获取数组中的某个元素
arr[3:5]    #用范围作为下标获取数组的一个切片,包括arr[3]不包括arr[5]
arr[:5]     #省略开始下标,表示从arr[0]开始
arr[-1]     #下标可以使用负数,-1表示从数组后往前数的第一个元素
arr[1:-1:2] #第三个参数表示步长,2表示隔一个元素取一个元素,第2,4,…后1

数组值修改

arr[2:4] = 100,101 #下标还可以用来修改元素的值

多维数组3X5

arr[0,3:5]      #索引第0行中第3和第4列的元素
arr[2:]         #取第3行之后的所有行
arr[[0,2,3]]    #取第0,2,3行数据
arr[1:,2:]      #索引第2和第3行中第3列、第4列和第5列的元素
arr[:,2]        #索引第2列的元素
print(a[[0,2],[1,3]])
print(a[0:2,1:3])
arr[1:,(0,2,3)] #索引第2、3行中第0、2、3列的元素
#mask是一个布尔数组,它索引第1、3行中第2列的元素
mask = np.array([1,0,1],dtype = np.bool)
print('索引结果为:',arr[mask,2])

6.改变数组形态

arr.reshape(3,4)           #设置数组的形状
arr.reshape(3,4).ndim)     #查看数组维度
np.arange(12).reshape(3,4) #改变一维数组的形状
arr.ravel()     #数组展平
arr.flatten()         #横向展平    a=np.arange(12).reshape(12,)
arr.flatten('F') #纵向展平
np.hstack((arr1,arr2))               #hstack函数横向组合
np.vstack((arr1,arr2))               #vstack函数纵向组合
np.concatenate((arr1,arr2),axis = 1) #concatenate函数横向组合
np.concatenate((arr1,arr2),axis = 0) #concatenate函数纵向组合
np.hsplit(arr, 2)       #hsplit函数横向分割
np.vsplit(arr, 2)       #vsplit函数纵向分割
np.split(arr, 2, axis=1) #split函数横向分割
np.split(arr, 2, axis=0) #split函数纵向分割
t[[1,2],:]=t[[2,1],:]    #行交换
t[:,[0,2]]=t[:,[2,0]]    #列交换

【案例】两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办

#两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办
import numpy as np  #导入NumPy库
import matplotlib.pyplot as plt
us_file_path="./US_video_data_numbers.csv"
gb_file_path="./GB_video_data_numbers.csv"
#加载国家数据
us_data=np.loadtxt(us_file_path,dtype=int,delimiter=",",skiprows=0,usecols=None,unpack=False)
gb_data=np.loadtxt(gb_file_path,dtype=int,delimiter=",",skiprows=0,usecols=None,unpack=False)
#添加国家信息
#构造全为0的数据
zeros_data=np.zeros((us_data.shape[0],1)).astype(int)
ones_data=np.ones((gb_data.shape[0],1)).astype(int)
#拼接两组数据
us=np.hstack((us_data,zeros_data))
gb=np.hstack((gb_data,ones_data))
data=np.vstack((us,gb))
print(data)

7.创建numpy矩阵

M1=np.mat("1 2 3;4 5 6;7 8 9")          #使用分号隔开数据
M2=np.matrix([[1,2,3],[4,5,6],[7,8,9]]) #使用matrix创建矩阵
M3=np.bmat("M1,M2")                     #使用bmat创建矩阵

8.矩阵运算

matr1+matr2  #矩阵相加
matr1-matr2  #矩阵相减
matr1*matr2  #矩阵相乘
np.multiply(matr1,matr2)) #对应元素相乘

matr1.T  #转置
matr1.H  #共轭转置(实数的共轭就是其本身)
matr1.I  #逆矩阵
matr1.A  #返回二维数组的视图

9.ufunc函数

不同形状的数组之间执行算术运算具有广播机制:
4c1efea246704d758105a8dcdc312460.png
在这里插入图片描述

x = np.array([1,2,3])
y = np.array([4,2,6])
x + y   #数组相加
x - y   #数组相减
x * y   #数组相乘
x / y   #数组相除
x ** y  #数组幂运算:1,4,729

x < y   #[ True False False]
x > y;x == y;x >= y;x <= y;x != y

np.all(x == y))  #np.all()表示逻辑and:True
np.any(x == y))  #np.any()表示逻辑or :False

10.利用numpy进行统计分析

(1) 二进制数据存储

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

5bc7fa0d29ef4ce0af079b9892e9e482.png
在这里插入图片描述

import numpy as np  #导入NumPy库
arr = np.arange(100).reshape(10,10)  #创建一个数组
np.save("F:/python/save_arr",arr)  #保存数组np.save("save_arr.npy",arr)
print('保存的数组为:\n',arr)

二进制文件

np.save("F:/python/save_arr",arr)  #单个数组存储
np.savez('../savez_arr',arr1,arr2) #多个数组存储
np.load("../tmp/save_arr.npy")     #读取含有单个数组的文件
np.load("../tmp/savez_arr.npz")    #读取含有多个数组的文件
print('读取的数组1为:',loaded_data1['arr_0'])
print('读取的数组2为:',loaded_data1['arr_1'])

文本文件

arr = np.arange(0,12,0.5).reshape(4,-1)
print('创建的数组为:',arr)
#fmt ="%d"为指定保存为整数
np.savetxt("../tmp/arr.txt", arr, fmt="%d", delimiter=",")
#读入的时候也需要指定逗号分隔
loaded_data = np.loadtxt("../tmp/arr.txt",delimiter=",")
print('读取的数组为:',loaded_data)
loaded_data = np.genfromtxt("../tmp/arr.txt", delimiter = ",")
print('读取的数组为:',loaded_data)

(2) 统计分析

1) 排序Sort,Argsort,lexsort

Sort

np.random.seed(42)  #设置随机种子
arr = np.random.randint(1,10,size = 10)  #生成随机数
arr.sort()  #直接排序

arr = np.random.randint(1,10,size = (3,3))  #生成3行3列的随机数
arr.sort(axis = 1)  #沿着横轴排序
arr.sort(axis = 0)  #沿着纵轴排序

Argsort

print('排序后数组为:',arr.argsort())  #返回值为重新排序值的下标

lexsort

a = np.array([3,2,6,4,5])
b = np.array([50,30,40,20,10])
c = np.array([400,300,600,100,200])
d = np.lexsort((a,b,c))  #lexsort函数只接受一个参数,即(a,b,c)
#多个键值排序是按照最后一个传入数据计算的
print('排序后数组为:',list(zip(a[d],b[d],c[d])))

2) 去重unique与重复数据

去重

names = np.array(['小明', '小黄', '小花', '小明', 
    '小花', '小兰', '小白'])
print('创建的数组为:',names)
print('去重后的数组为:',np.unique(names))

重复

np.tile(arr,3)           #对数组进行重复
arr.repeat(2, axis = 0)  #按行进行元素重复
arr.repeat(2, axis = 1)  #按列进行元素重复

3) 统计函数

np.sum(arr)        #计算数组的和
arr.sum(axis = 0)  #沿着横轴计算求和
arr.sum(axis = 1)  #沿着纵轴计算求和
np.mean(arr)       #计算数组均值
arr.mean(axis = 0) #沿着横轴计算数组均值
arr.mean(axis = 1) #沿着纵轴计算数组均值
np.std(arr)  #计算数组标准差
np.var(arr)  #计算数组方差
np.min(arr)  #计算数组最小值
np.max(arr)  #计算数组最大值
np.ptp(arr)  #极值,最大减去最小
np.argmin(arr)  #返回数组最小元素的索引
np.argmax(arr)  #返回数组最大元素的索引
np.cumsum(arr)  #计算所有元素的累计和
np.cumprod(arr) #计算所有元素的累计积

默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果;

获取最大值最小值的位置

np.argmax(t,axis=0)
np.argmin(t,axis=1)
目录
相关文章
|
20天前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
172 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
2天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
12 3
|
4天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
19 5
|
3天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
10 2
|
17天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
20天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
269 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
17天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从入门到精通Python,打好 LLM大模型的基础
Python学习圣经:从0到1精通Python,打好AI基础
|
17天前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
13 0
|
17天前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
26 0
|
19天前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
39 0