【python】Numpy库学习笔记

一、创建数组

ndarray构造器创建

import numpy as np

'''
使用底层 ndarray 构造器来创建
参数说明:
名称	   描述
object	数组或嵌套的数列
dtype	数组元素的数据类型,可选
copy	对象是否需要复制,可选
order	创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok	默认返回一个与基类类型一致的数组
ndmin	指定生成数组的最小维度
'''
np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

从已有对象创建数组

# 创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
np.empty(shape, dtype = float, order = 'C')

# 创建指定大小的数组,数组元素以 0 来填充:
np.zeros(shape, dtype = float, order = 'C')

# 创建指定形状的数组,数组元素以 1 来填充:
np.ones(shape, dtype = None, order = 'C')

# 根据数组 a 的形状生成一个全1数组
np.ones_like(a)

# 根据数组 a 的形状生成一个全0数组
np.zeros_like(a)

# 根据数组 a 的形状生成一个数组,每个元素值都是 val
np.full_like(a, val)

# 将a转化为ndarray,其中参数 a 可以是列表、元组、多维数组
np.asarray(a, dtype = None, order = None)

'''
接受buffer输入参数,以流的形式读入转化为ndarray对象。用于实现动态数组。
count是读取的数据数量,默认-1读取所有数据。
offset是读取的起始位置,默认为0
'''
np.frombuffer(buffer, dtype = float, count = -1, offset = 0)

# 从可迭代对象中建立ndarray对象,返回一维数组
np.fromiter(iterable, dtype = float, count = -1)

从数值范围创建数组

'''
根据start与stop指定的范围以及步长step,生成一个ndarray
参数    说明
start  起始值,默认为0
stop   终止值
step   步长,默认为1
'''
np.arange(start, stop, step, dtype)

'''
创建一个等差数列构成的一维数组
参数         说明
num         生成的样本数量,默认为50
endpoint    该值为True时数列中包含stop值,反之不包含。默认为True
retstep     该值为True时生成的数组会显示间距,反之不显示。默认为False
'''
np.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None)

'''
创建一个等比数列
参数    说明
start  起始值为 base**start
stop   终止值为 base**stop
base   取对数时log的底数。默认为10.0
'''
np.logspace(start, stop, num = 50, endpoint = True, base = 10.0, dtype = None)

二、数组的变换

维度变换

# 假设已定义一个ndarray数组 a

# 不改变数组元素,返回一个shape形状的数组,原数组不变
a.reshape(shape)

# 与 .reshape()功能一致,但修改原数组
a.resize(shape)

# 将数组n个维度中两个维度进行调换
a.swapaxes(ax1, ax2)

# 对数组进行降维,返回折叠后的一维数组,原数组不变
a.flatten()

类型变换

# 生成一个新类型的数组
new_a = a.astype(new_type)

三、数组的操作

数组的索引和切片类似于 list 列表

索引

# 根据索引取值。每个维度一个索引,用逗号分割
a[1]        # a一维
a[1, 2]     # a二维
a[1, 2, 3]  # a三维

切片

# 一维数组切片与列表类似。a[起始编号:终止编号:步长]
a[1:10:2]

# 多维数组切片。每个维度切片方式类似一维数组切片方式,维度之间用逗号分割。
a[:, 1, -3]
a[:, 1:3, :]
a[:, :, ::2]

四、数组的运算

数组与标量之间的运算

数组与标量之间的运算作用于数组的每一个元素

image-20230105170050786

Numpy一元函数

对 ndarray 中的数据执行元素级运算的函数

# 计算数组各元素的绝对值
np.abs(a)
np.fabs(a)

# 计算数组各元素的平方根
np.sqrt(a)

# 计算数组各元素的平方
np.square(a)

# 计算数组各元素的自然对数、10底对数和2底对数
np.log(a)
np.log10(a)
np.log2(a)

# 计算数组各元素的ceiling值(向上取整)、floor值(向下取整)
np.ceil(a)
np.floor(a)

# 计算数组各元素的四舍五入值
np.rint(a)

# 将数组各元素的小数和整数部分以两个独立数组形式返回
np.modf(a)

# 计算数组各元素的指数值
np.exp(a)

# 计算数组各元素的符号值
np.sign(a)

# 计算数组各元素的普通型和双曲型三角函数
np.cos(a)
np.sin(a)
np.tan(a)
np.cosh(a)
np.sinh(a)
np.tanh(a)

Numpy二元函数

# +、-、*、/、**等。两个数组各元素进行对应运算
a+b
a*b

# 元素级最大值/最小值计算
np.maximum(a, b)
np.minimum(a, b)
np.fmax(a, b)
np.fmin(a, b)

# 元素级模运算
np.mod(a, b)

# 将数组b中各元素值的符号赋值给数组x对应元素
np.copysign(a, b)

# 算术比较,产生布尔型数组 >,<,>=,<=,==,!=
a > b

五、随机数函数

# 根据 d0-dn 创建随机数数组,浮点数,[0,1),均匀分布
np.random.rand(d0, d1, ..., dn)

# 根据 d0-dn 创建随机数数组,标准正态分布
np.random.randn(d0, d1, ..., dn)

# 根据shape创建随机整数或整数数组,范围是[low,high)
np.random.randint(low, high, shape)

# 随机数种子,s是给定的种子值。相同种子生成的随机数相同
np.random.seed(s)

###################################################

# 根据数组 a 的第一轴进行随机排列,改变数组 a
np.random.shuffle(a)

# 根据数组 a 的第一轴产生一个新的乱序数组,不改变数组 a
np.random.permutation(a)

# 从一维数组 a 中以概率 p 抽取元素,形成 size 形状新数组。
# replace表示是否可以重用元素,默认为False
np.random.choice(a, size, replace = False, p)

###################################################

# 产生具有均匀分布的数组,low起始值,high结束值,size形状
np.random.uniform(low, high, size)

# 产生具有正态分布的数据,loc均值,scale标准差,size形状
np.random.normal(loc, scale, size)

# 产生具有泊松分布的数据,lam随机事件发生率,size形状
np.random.poisson(lam, size)

六、统计函数

Numpy 直接提供的统计类函数:

# 求和 
np.sum(a, axis = None)

# 求期望
np.mean(a, axis = None)

# 求加权平均值
np.average(a, axis = None, weights = None)

# 求标准差
np.std(a, axis = None)

# 求方差
np.var(a, axis = None)

#注:axis=None 则计算所有元素。axis = i 根据第i轴进行计算。

####################################################

# 求数组a中元素的最小值、最大值
np.min(a)
np.max(a)

# 求数组a中元素最小值、最大值的降一维后下标
np.argmin(a)
np.argmax(a)

# 根据 shape 将一维下标 index 转换为多维下标。
# 常与np.argmin()/np.argmax()搭配使用,将扁平化后的下标重塑成多维下标。
np.unravel_index(index, shape)

# 计算数组a中元素最大值与最小值的差
np.ptp(a)

# 计算数组a中元素的中位数(中值)
np.median(a)

七、梯度函数

梯度:连续值之间的变化率,即斜率。

eg:[a,b,c]

a的梯度为(b-a)/1

b的梯度为(c-a)/2

c的梯度为(c-b)/1

# 计算数组a中元素的梯度,当a为多维时,返回每个维度梯度
np.gradient(a)
image-20230105201737634

八、存取数据

数据的csv文件存取

csv只能有效存取一维和二维数组

# 写
np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='',
            footer='', comments='# ', encoding=None)

# 读
np.loadtxt(fname, dtype=float, delimiter=None, unpack=False)

多维数据的存取

# 写。数据分割字符串sep为''时,写入文件为二进制
a.tofile(fname, sep='', format='%s')

# 读。count为入元素个数,-1表示读入整个文件
np.fromfile(fname, dtype=float, count=-1, sep='')
#注:读入的数组是一维数组,丢失了原数组的维度信息,要用 .reshape(shape)还原维度

注:该方法需要读取时知道存入文件时数组的维度和元素类型。可以通过元数据文件来存储额外信息。

numpy 提供了一个更便捷的方式存取多维数据。缺点是必须采用 numpy 自定义的文件格式。

# 存
np.save(fname, array)     # 文件以 .npy 为扩展名
np.savez(fname, array)    # 文件以 .npz 为扩展名

# 取
np.load(fname)
posted @   hzyuan  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-01-05 【算法】几乎有序的数组排序(小根堆扩展问题)

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示