numpy常用操作

 

矩阵运算

  • * 表示按元素相乘
  • @ 表示按矩阵相乘,或使用A.dot(B)
  • 使用不同类型的数组进行操作时,结果数组的类型应为更一般或更精确的类型(称为向上转换),数值型字符串传送给float64类型的数组时,类型会自动转换成float64。当建立一个np.array时,如果有字符串,有数字,数字会转换成字符串,如果有混合类型,自动转换成其中最高级别类型。

矩阵索引

  • 一维数组可以进行索引、切片、迭代,像list一样
  • 多维数组一个轴有一个索引,用逗号隔开,当索引数量少于轴的数量时,会被认为是完整的切片。
  • 若有多个轴,可以使用...代替,如x是5个轴的矩阵,x[1,2,...] 相当于 x[1,2,:,:,:],x[...,3] 等效于 x[:,:,:,:,3],x[4,...,5,:] 等效于 x[4,:,:,5,:]
  • 花式索引,索引可以是一维数组,可以是多维数组(每个数组为第一维的索引)
  • 布尔索引,在属性分配中很有用

矩阵视图

# 不同的数组对象可以共享相同的数据
c = a.view() # a和c共享数据,都可以改变
c.base is a # True
c.flag.owndata # False

# 切片返回视图
s = a[:,0] # 改变s的值会改变a值,如果不使用a了,应在后面加.copy(),这样del a时a就可以释放内存了,否则del a也不会删除a

# 深拷贝
d = a.copy() # d是a的完整副本

Mat类型

mat类型和2维以上ndarray类型不可使用set(),会报错不可哈希,TypeError: unhashable type: 'matrix'。一维ndarray类型可以哈希

a.A  # 转成数组
a.A1  # 转成一维数组

创建矩阵

np.array([1,2]) # 创建数组,不能传多个元素,也可以传序列
np.zeros((size)) # 0数组
np.ones((size)) # 1数组
np.empty((size)) # 空数组,内容随机
np.eye(size) # 单位矩阵
np.arange(0,10,1) # 产生数字数组,类似于range(), 不过返回数组而不是列表
np.linspace(0,1,10) # 划分一个范围
np.r_[1:10,11,12] # 创建一个行,允许使用范围操作符:,行为类似于vstack
np.c_[1:10,1:10] # 创建多个列,但是数量要一致,行为类似于hstack
a[:,np.newaxis] # 创建新轴,若a是1维,返回列矩阵
ax,bx,cx = np.ix_(a,b,c) # ax,bx,cx 都是三维数据,查看shape,result = ax+bx*cx的矩阵即使a+b*c的值

形状操作

a.reshape(size) # 重排矩阵,若将size设为-1,则自动计算其他size的大小。也可以直接对a.shape赋值
a.resize(size) # 重排矩阵,改变原矩阵,返回None
a.reshape(-1) # 返回一维新数组
a.ravel() # 返回一维新数组
np.hstack((a, b)) # 矩阵合并,水平合并,等效于column_stack(())
np.vstack((a, b)) # 矩阵合并,垂直合并,等效于row_stack(())
np.hsplit(a,n) # 矩阵拆分,水平拆分为n个,a的列要可以分成n个
np.hsplit(a,(c1,)) # 矩阵拆分,水平在c1出拆分,c1为0则会拆出来一个空矩阵
np.vsplit
np.split(a,(c1,),axis=1) # 沿行拆分,作用同np.hsplit()
np.tile(a, (size)) # 复制矩阵

矩阵方法和数学函数:

a.shape # 数组形状
a.size # 元素总数
a.ndim # 轴的个数(维度)
a.sum(axis=0) # 求和,默认求所有元素的和
a.cumsum(axis=0) #累加求和
a.min(axis=0) # 最小值
a.max(axis=0) # 最大值
a.argmax(axis=0) # 最大值,返回索引
a.argsort(axis=0) # 排序,返回索引,默认axis=1对每一行排序
np.argsort(a,axis=0) # 排序,返回索引,对某一列排序可以先用某一列排序返回索引,再用索引查所有数据
np.nonzero(a) # 返回一个元组,为非零索引,2维矩阵返回包含两个array的元组([0,1],[2,1])表示在位置[0,2]和[1,2]处非零。或a.nonzero()

a.flat # 返回迭代器,矩阵中所有元素的迭代器,用于循环所有元素

a.T # 转置
a.transpose() # 转置
np.trace(a) # 求迹

# 这些函数对数组元素进行运算,产生一个数组作为输出
np.sin(a) # sin函数
np.exp(a) # 指数
np.exp2(a) # 底数为2的指数
np.log(a) # a的对数,底数为10
np.log2(2)
np.sqrt(a) # 开方
np.floor(a) # 向下取整
np.var(a) # 方差,或a.var()
np.pi # pi
np.inf # 无穷

# 线性代数计算
np.linalg(a) # 求逆
np.linalg.solve(a,y) # 求线性解,ax=y
np.linalg.eig(a) # 求特征值,特征矩阵

随机函数

np.random.random((size)) # 产生0-1随机数,形状为size
np.random.rand(d1,d2,...) # 产生0-1均匀分布随机数,形状为d1,d2...
np.random.randn(d1,d2,...) # 产生标准正态分布(均值为0,方差为1),形状为d1,d2...
np.random.normal(loc=mu, scale=sigma, size=None) # 产生正态分布(均值为mu,方差为sigma,size)
np.random.uniform(low=a, high=b, size=None) # 产生a到b的均匀分布随机数,形状为size
np.random.randint(low, high=None, size=None, dtype='l') # 产生均匀分布的整数,若只有一个参数,从0开始,不包括最大值
np.random.shuffle(a) # 打乱顺序,返回Nono,在原数据上面进行洗牌。如果a是多维数组,只对第一维,也即是列进行洗牌,

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值