Numpy学习笔记

文章目录

根据视频学习,整理出的笔记,难免会有错误的部分,请多多指教。


import numpy as np
1.创建数组
np.array([[1,2,3,],
          [3,4,5],
          [4,,5,6]])
np.arange(10) #0-10之间的整数,不包括10
np.arange(2,10,2) #2-10之间的数,间隔为2,左闭右开
np.linspace(0107)生成首位是0,末位是10,含七个数的等差数列
np.logspace(a,b,c,base=d)默认是以10为底的指数,从10的a次幂到10的b次幂之间的c个数,作弊右臂,base是改变底数
np.range()注意与np.arange()的区别

2.数组修改查询
np.size()查看数据个数
np.shape()结果返回一个元组(2323列
np.shape[0]获取行数
np.shape[1]获取列数
np.dtype()查看数据类型。注:i1,i2,i4,i8代替int8,int18,int36,int64
np.reshape()重新改变维度
np.astype()改变数据类型

np.itemsize()数组中每个元素的字节大小
np.ndim()数组轴的个数,轴的个数被称作秩,维度

3.数组的拼接
np.ystack((a,b))竖直拼接
np.hstack((a,b))水平拼接

4.数组的行列交换
行交换 t[[1,2],:] = t[[2,1],:]
列交换 t[:,[1,2]] = t[:,[2,1]]
'''nan  浮点类型 数据缺失会出现,不合适的计算会出现
-inf ,inf 正负无穷
'''
5.创建向量
np.r_[0:2:0.5] #创建行向量 0-2之间的数,间隔为0.5,左闭右开
np.c_[0:2:0.5] #创建列向量

6.创建矩阵

创建全0矩阵
np.zeros(3,dtype=np.float) #只有一个参数默认为列
np.zeros((2,3),dtype=np.float) #两个参数使用元组的形式传递参数


创建全1矩阵
np.ones(3,dtype=float)
np.ones((2,3),dtype=float)

创建随机行矩阵
c = np.linspace(2,10,6)
print(c)
d = c.reshape(2,-1) #-1为占位符,可以推测后面的值
print(d)

创建单位矩阵 两种方法相同
np.eye(5)
np.identity(5)

7.矩阵计算
a = np.arange(2,10)
a = a.reshape(4,2)
print(a)

运算
print(a +2) #加
print(a -2) #减
print(2-a)  #减
print(a/2)  #除
print(a*2)  #乘
print(a**2) #取指数
print(2*a)
print(2**a)
print(np.log(a)) #取对数
print(np.sqrt(a)) #开根
print(np.power(a,3)) #次方

矩阵转置
print(a.T)
print(np.transpose(a))

矩阵的数值运算
np.random.seed(1) #设置随机数种子,保证每次生成的随机数相同
a = 10*np.random.random((3,2))
print(a)
print(a.sum())   #整个矩阵各个元素的和
print(a.sum(axis=1)) #各行的和
print(a.sum(axis=0)) #各列的和
print(a.max())    #整个矩阵中的最大值
print(a.max(axis=1)) #各行的最大值
print(a.max(axis=0)) #各列的最大值  min最小值


矩阵运算
a = np.arange(1,13).reshape(3,-1)
print(a)
print(a.prod()) #元素累乘
print(a.mean()) #矩阵各元素的平均值
print(np.median(a)) #矩阵中值
print(a.std()) #各元素标准差
print(a.var()) #各元素方差
print(np.var(a))
print(np.diff(a))  # 当前元素减去前面元素的差
print(np.cumsum(a)) #每个元素变成当前元素加前面所有元素的和


修改矩阵值
比4小的全部为4,比8的大全部为8,四舍五入
a = np.linspace(1,10,9,dtype=float).reshape(3,-1)
print(a)
print(np.clip(a,4,8))
print(a.round(decimals =1)) #保留小数的个数

矩阵求逆
a =np.arange(1,10).reshape(3,3)
print(a)
print(np.linalg.inv(a))


两个矩阵的操作
a = np.arange(2,5,0.5,dtype = np.float).reshape(3,-1)
b = np.arange(3,6,0.5,dtype = np.float).reshape(3,-1)
print(a)
print(b)
print(a+b)
print(a-b)
print(a*b) #等同于np.multiply(a,b)
print(a/b)
print(np.log(a))
print(np.power(a,b))
print(a > 2.5)
print(a > b)

矩阵相乘
a = np.arange(2,11).reshape(3,-1)
b = np.arange(4,13).reshape(-1,3)
print(a)
print(b)
print(a @ b)
print(np.dot(a,b))
print(a.dot(b))

矩阵合并

多个行向量合并,矩阵合并
a = np.arange(1,4)
print(a)
b = np.arange(4,7)
print(b)
c = np.vstack((a,b,a,b)) #垂直合并
print(c)
d = np.hstack((a,b,a,b)) #水平合并,就是拼接
print(d)
e = np.vstack((a.T,b.T,a.T,b.T)) #对于行向量使用转置方法返回还是行向量
print(e)
print(a[:,np.newaxis]) #行向量转化成列向量

列向量的合并
a = np.arange(1,5)[:,np.newaxis]
print(a)
b = np.arange(5,9)[:,np.newaxis]
print(b)
c = np.concatenate((a,b,a)) # 列向量的拼接,矩阵的拼接,axis参数默认为0,在垂直方向拼接(行的拼接)
print(c)
d = np.concatenate((a,b,a),axis=1) #在水平方向的拼接(列的拼接)
print(d)



矩阵分解

将矩阵沿水平、垂直方向分解
a = np.arange(12).reshape(3,4)
print(a)
print(np.split(a,2,axis=1)) #垂直方向(从上到下劈一刀)均分
print(np.split(a,3,axis=0)) #水平方向(从左到下右两刀)均分
print(np.array_split(a,3,axis=1))  #垂直方向分三分,最多的在第一份 非均匀
print(np.vsplit(a,3))
print(np.array_split(a,2,axis=0))  #水平方向分两分,最多的在第一份 非均匀
print(np.hsplit(a,2))

将列向量转换为行向量
a = np.arange(12)[:,np.newaxis]
print(a)
print(a.squeeze())
print(a.flatten())
print(a.reshape(3,4))
print(a.reshape(3,4).flatten())  #可将离散数据亚平,但squeeze()不行

8.切片和索引

获取指定值的索引
获取一个矩阵最大值、最小值以及非零索引
a = np.array([[-6,6,1],
              [-2,1,7],
              [0,2,0]])
print(np.argmin(a))#获取矩阵最小值索引 显示的是位置
print(a.argmin())
print(np.argmax(a)) #获取矩阵最大值索引
print(np.argmin(a,axis=0)) #获取矩阵每列的最小值索引
print(np.nonzero(a)) #可以理解第一个array代表行,第二个代表列


获取矩阵块数据
获取矩阵中具体的某个值,获取矩阵指定行或列或行列
a = np.array([[-6,6,1],
              [-2,1,7],
              [0,2,0]])
print(a[1,2],a[1][2]) #获取索引为1行2列的值
print(a[1],a[:][1])   #获取索引为1的行,a[:][1]所有行中的第一行
print(a[:,2])   #索引为1的列,返回一个行向量
print(a[:,1:2])#索引为1的列,返回一个列向量(:则是切片,保持原来的维度)



数据的迭代,迭代矩阵的行或列

a = np.array([[-6,6,1],
              [-2,1,7],
              [0,2,0]])
#行迭代
for i in a :
    print(i)
#列迭代
for i in a.T:
    print(i)

print(a.flatten()) #将矩阵降低一维

bool索引进行切片
a = np.arange(0,100,20)
b = np.array([1,0,1,7,-1],dtype=bool) #0表示False,0之外的表示True
print(a)
print(b)
print(a[b]) #通过布尔类型选择数据

9.随机模块

a = np.random.seed(10)
print(a)
print(np.random.choice(11,size=5)) #选出的元素可重复
print(np.random.rand(3,2)) #返回服从[0,1)均匀分布的随机样本值
print(np.random.randint(15,size=(2,3))) #返回【0,a)指定维度的整数矩阵
print(np.random.randint(10,15,size=(2,3)))  #返回自定义区间指定维度的整数矩阵

mu = 0 #均值
sigma = 1 #方差
print(np.random.normal(mu,sigma,(2,5))) #指定维度的符合高斯分布的矩阵

对一数据随机打散
a = np.arange(10).reshape(2,5)
print(a)
np.random.shuffle(a)
print(a)
print(np.random.shuffle(a)) 

其他操作
使用时注意数据是否有内存,避免修改一地方的值,另外一个地方的值随之变化
a = np.arange(5)
b = a
c = b
d = c
print(d is a, c is a ,b is a)
d[0] = 100
print(a)  #d改动,a 随着变化
e = a.copy() #拷贝一份a 给e,ae不共享内存
print(e is a)
e[0] = 20
print(e,a)

#元素排序
a = np.array([[-6,6,1],
              [-2,1,7],
              [0,2,0]])
print(np.sort(a)) #对每行的数据从左到右,从小到大排序 axis默认为0
print(np.sort(a,axis=1))  #对每列的数据从上到下,从小到大排序



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值