numpy-record

发布时间 2023-05-01 19:25:40作者: duuuuu17

本篇只是学习NumPy时的一本记录本,仅用于本人记录不熟点和未知点,后续回顾使用。

编辑器:Jupyter Notebook

ipykernel:Python3

使用linspace/logspace生成

np.linspace(开头,结尾,数量)

linspace更适用于生成一个线性数据局

而logspace(开头,结尾,数量,base=底数)

logspace更适用于生成一个指数函数数据

#导入matlab的python库
import matplotlib.pyplot as plt
import numpy as np
#准备数据
N = 10
x = np.arange(N)#x轴数据
y1 = np.linspace(0,10,N)* 100#y轴数据
y2 = np.logspace(0,10,N,base=2)#y轴数据
#创建画布
plt.figure()
#将数据画入画布
plt.plot(x, y1, '*')
plt.plot(x, y2, 'o')
#显示画布
plt.show()

image-20230501151651163

矩阵元素判断

构建矩阵并进行元素判断

#创建矩阵
a  = ((2,3),(3,4))
b = np.array(a,dtype=np.float32)
#创建元素判断结果矩阵,注意,矩阵在判断的时候,是对矩阵中的所有元素依次比较,并将结果以布尔矩阵进行返回
r = b>3
print(r)
'''
>>
result: array([[False, False],
        [False,  True]])'''

将返回的布尔矩阵进行判断

#承接上述代码,我们将返回的布尔矩阵进行判断
#此处使用的是逻辑运算,any()/all() 注意:不能使用if进行判断,因为它是矩阵!!!
#any()为只要有true,就返回true
print(r.any())
>>False
#all()需要所有元素都为true,才返回true
print(r.all())
>>True

创建全0或全1矩阵

#np.zeros(维数)
#np.ones(维数)
#np.zeros/ones_like(矩阵)
print(np.ones((2,3,5)))
print('\n\n')
print(np.zeros((2,3,5)))
print(np.ones_like(np.zeros((2,3,5))))

random生成

#生成范围为0~1的连续均匀分布的随机数
np.random.rand(2,3)
#生成指定上下界的连续分布
np.random.uniform(-1,1,(2,3))

#规范点是创建一个随机数生成器,后续创建随机数时使用rng为前缀
rng = np.random.default_rng(1)
rng.uniform(low=-1,high=1,size=(3,4))
#使用生成器创建正态分布和均匀分布
#正态分布,loc分布的均值,scale分布的标准差,size输出值维度
rng.normal(loc=0.0,scale=1.0,size=(2,3))
#均匀分布,low\high为下\上界
#离散型
rng.integers(low=0,high=10,size=(2,3))
#连续性
rng.uniform(low=-1,high=10,size=(2,3))
  • numpy.random.shuffle(a):将数组a中的元素随机排列。
  • numpy.random.permutation(a):将数组a中的元素随机排列,但不保持原有顺序。

将array保存为文件

# 直接将给定矩阵存为 a.npy
np.save('./data/a', np.array([[1, 2, 3], [4, 5, 6]]))

# 可以将多个矩阵存在一起,名为 `b.npz`
np.savez("./data/b", a=np.arange(12).reshape(3, 4), b=np.arange(12.).reshape(4, 3))

# 加载单个 array
np.load("data/a.npy")
# 加载多个,可以像字典那样取出对应的 array
arr = np.load("data/b.npz")
arr["a"]
arr['b']

元素统计和矩阵属性

矩阵属性

矩阵尺度

#查看矩阵维度
arr["b"].ndim
>>2
#查看矩阵每个维度的实际大小
arr['b'].shape 
>>(4,3)
#矩阵元素个数
arr['b'].size
>>12

元素统计

#axis指定按行1还是列0查找符合元素
#最大数
arr['b'].max(axis = 1)
#最小数
arr['b'].min(axis = 1)

#注意:在深度学习中的很多情况下,是需要数据保持原有维度方便后续计算
#使用参数:keepdims=True来保持,不适用这个参数时,一般返回一维数据
arr['b'].min(axis = 1,keepdims=True)#保持了行维度

#或者使用amax()/amin(),来根据输入矩阵,按指定的行或列进行返回结果,但仍为一维
np.amin(arr['b'],axis=0,keepdims=True)

#中位数
np.median(arr['b'])

#分位数
#分位数是将数据分成相等部分的值,通常用于描述数据的分布情况和比较不同数据集之间的差异。
# 分位数,按行取 3/4,同时保持维度
np.quantile(arr['b'], q=0.75, axis=1, keepdims=True)

分位数解释:

分位数(Quartile)是将一组数据分成四个部分的统计量,也称为四分位数。它表示了数据的中间50%的范围,即第25个百分位数和第75个百分位数之间的值。
例如,如果一个样本有100个数据点,那么可以将它们分成四组,每组包含25个数据点。
第一组包含最小值和第二小值,第二组包含第二小值和第三小值,第三组包含中位数和第四小值,第四组包含最大值和中位数。
这四个部分分别对应着第一四分位数、第二四分位数、中位数和第三四分位数。

元素计算

#需要注意的是,以下函数都可以指定按行或列进行计算
#平均值
np.average(arr['b'],axis=1)
#求和
np.sum(arr['b'])
#累计求和
np.cumsum(arr['b'],axis=1)
#标准差
np.std(arr['b'])
#方差
np.var(arr['b'],axis=1)

分解和组合

转置

#二维常用
arr.T
#三维以上
np.transpose(arr)
#当transpose指定列数交换顺序时
#如:交换2、3列元素
np.transpose(arr.reshape(4,1,3,1),axes=(0,2,1,3))

切片和索引

切片和索引是通过对已有 array 进行操作而得到想要的「部分」元素的行为过程。其核心动作可以概括为:按维度根据 start:stop:step 操作 array。

不进行处理的维度统一使用:...代替,如:arr[::,-1]==arr[...,-1]

#有几行就有几个:
#比如二维的矩阵,为arr[:,:] == arr[::] == arr[:]
#:表示取连续的数据
arr[:,1]
#[,]表示取离散型的数据
arr[:,[1,2]]

拼接