Numpy数值计算基础 学习笔记

Numpy数值计算基础:

在python中,list或者tuple可以用来表示数组:

list=[1,2,3,4]
list=[[1,2,3],[1,2,3]]

此外,python中提供了array模块:
array是python中一种高效的数据存储类型。它和list相似,但所有的数组成员必须是同一种类型,在创建数组的时候,就确定了数组的类型。
由于array不支持多为数组,也没有各种运算符,Numpy为弥补这些不足,提供了另外一种数组ndarray。

Numpy数据对象ndarray

ndarray是存储单一数据类型的多维数组对象。

Numpy的特点:

  • Numpy中的重要数据类型
  • 数组所有元素都是同种类型
  • 别名array
  • 有丰富的函数方法
  • 有利于节省内存和提高CPU运行效率

1.数组的维数及属性:

在这里插入图片描述

2.数组创建:

import numpy 
numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)

在这里插入图片描述

  • 创建数组并且查看数组属性:
import numpy as np

arr2 = np.array([1,2,3,4],[4,5,6,7],[7,8,9,10])
print('创建的数组是:'arr2)

# 查看数据类型
print(arr2.dtype)
# 查看元素个数
print(arr2.size)
# 查看数组每个元素的大小
print(arr2.itemsize)
  • 重新设置数组的属性:
# 重新设置shape
arr2.shape = 4,3
arr2.shape = 2,2,3
  • 使用arange函数创建数组
np.arange(0,1,0.1# 0-1,步长为0.1
  • 使用linspace函数创建等差数列
np.linspace(0,1,12) #创建等差数列分布数组,(起始值,终止值,元素个数)
  • 使用logspace函数创建等比数列
np.logspace(0,2,20) #起始值10**0,终止值10**2,共20个元素
  • 使用zeros函数创建数组
np.zeros((2,3)) #元素为0
# 用ones函数类似,但ones的元素为1
  • 使用eye函数创建单位矩阵
np.eye((3))
  • 使用diag函数创建数组
np.diag([1,2,3,4]) #斜对角元素

3.数组的数据类型:

在这里插入图片描述

在这里插入图片描述
转换类型的方法类似平时的强制转换:

np.float64(42)
#转换结果:42.0
np.float(Ture)
#转换结果:1.0
np.float(False)
#转换结果:0.0

创建数据类型步骤示例:

'''创建一个存储餐饮企业库存信息的数据类型。分别是
长度为40的字符串记录商品名称,
64位整数记录库存数量,
64位单精度浮点记录商品价格'''
df =np.dtype([("name",np.str,40),("numitems",np.int64),("price",np.float64)])

使用array创建数组的时候,数组类型默认是浮点型,自定义数组数据,则可以预先指定数据类型

示例:

itemz =np.array([("tomatoes",42,4.14),("cabbages",13,1.72)],dtype=df)

4.生成随机数:

random模块常用随机数生成函数
在这里插入图片描述

import math
import numpy as np

#设置随机数种子
np.random.seed(10)
#如果生成随机数的种子是一样的,那么随机数数值也会是一样的

#无约束条件下生成随机数数组
np.random.random(100) #生成一个大小在0-1之间的随机数数组,共用100个元素

#生成一个服从均匀分布的随机数
np.random.rand(10,5) #10行5列

#生成一个正态分布的随机数
np.random.randn(10,5) #10行5列

#生成给定范围随机数
np.random.randint(2,10,size=[2,5]) #创建一个值不低于2、最大值不高于10的2行5列数组

5、通过索引访问数据

1、一维数组的索引
arr =np.arrange(10)
#用整数作为下标可以获取数组元素
arr[5]
#用范围作为下标获取数组的一个切片
arr[3:5]
#省略开始下标,表示从arr[0]开始
arr[:5]
#用负数,表示从数组后面往前的元素
arr[-1]
#下标还可以用来修改元素的值
arr[2:4]= 100,101
#下标第三个参数表示步长
arr[1:-1:2] #隔一个元素取一个元素
#步长为负数时,开始下标必须大于结束下标
arr[5:1:-2] #从后往前取值
2、多维数组的索引
#创建二维数组
arr=np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
print(arr)

#索引第0行中第3第4列的元素
arr[0,3:5]

#索引第2和第3行中第3-最后列的元素
arr[1:,2:]

#索引第2列的元素
arr[:,2]

#从两个序列的对应位置取出两个整数来组成下标:arr[0,1],arr[1,2],arr[2,3]
arr[[(0,1,2),(1,2,3)]]

#索引第2,3行中第0,2,3列的元素
arr[1:,(0,2,3)]

#布尔值索引访问数据
mask = np.array([1,0,1],dtype=np.bool) #第一和第三个元素为1
#索引第1,3行中第2列的元素
arr[mask,2]
变换数组的形态
  • 使用reshape改变数组形状
#可以把一维数组改变成二维数组
arr.reshape(3,4)
  • 使用ravel函数展平数组
#二维数组变成一维数组
arr.ravel()
  • 使用flatten函数展平数组
arr.flatten() #横向展平
arr.flatten('F') #纵向展平 
  • 组合数组
#使用hstack函数实现数组横向组合
np.hstack((arr1,arr2))

#使用vstack函数实现数组纵向组合
np.vstack((arr1,arr2))

#使用concatenate函数实现数组的横向纵向组合
np.concatenate((arr1,arr2),axis=1) #横向 
np.concatenate((arr1,arr2),axis=0) #纵向
  • 分隔数组
#使用hsplit函数实现数组横向分隔
a,b,c=np.hsplit(arr1,3) #分隔成三份
a,b,c=np.hsplit(arr1,[0,1]) #表示在0,1位置切割

#使用vsplit函数实现数组纵向分隔
a,b,c=np.vsplit(arr1,2) #分隔成两份

Numpy矩阵与通用函数:

1.创建Numpy矩阵

Numpy提供了两基本对象:nadarrayufunc。即数组和通用函数对象
在这里插入图片描述

2.认识ufunc函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用Numpy进行统计分析

读写文件

  • 读取二进制格式的数据
'''以二进制的格式保存数据'''
np.save("路径",arr) #默认.py结尾

'''从二进制的文件中读取数据'''
np.load("文件路径")

'''多个数组保存到一个文件'''
np.savez("保存路径",arr1,arr2)
  • 读取文本格式的数据
#将数组写到某种分隔符隔开的文本文件中
np.savetxt("保存路径",arr,fmt="%d",delimiter=",") #以逗号隔开

#将文件加载到一个二维数组中
np.loadtxt("保存路径",delimiter=",",dtype='i2') #指定以int类型读取

#面向结构化数组和缺失数据
np.genfromtxt("路径",delimiter=",")

排序

  • 直接排序
arr.sort(axis=1) #沿横轴排序
arr.sort(axis=0) #沿纵轴排序
  • 间接函数
arr.argsort() #返回重新排序值的下标
np.lexsort((a,b,c)) #返回按照最后一个传入数据排序
  • 去重与重复数据
    unique函数即可找出数组中唯一值并返回已排序的结果
np.unique(A)
sorted(set(A)) #python内置函数去重

tile函数主要有两个参数:(对数组重复)

reps=(3,4)
np.tile(A,reps) #A表示指定重复的数组,reps表示横向4次纵向3次复制 

`repeat``函数主要有三个参数:(对元素重复)

numpy.repeat(a,repeats,axis=None)
#‘a’是需要重复的数组元素,‘repeats’是重复次数,‘axis’指定哪个轴进行重复
arr.repeat(a,2,axis=0)
  • 计算

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值