numpy库的用法

import numpy as np
import random
print(np.__version__)#python是动态类型的语言
#不同于python列表,numpy要求数组必须包含同一类型的数据,如果类型不匹配的话,numpy会向上转换。
a=np.array([3.14,4,2,1])
#print(type(a[2]))#<class 'numpy.float64'>
b=np.array([range(i,i+3) for i in [2,4,6]])#这是一种巧妙的生成2维矩阵的方法
#print(b)
cc=np.zeros((4,4),dtype=int)
dd=np.ones(5,float)
ee=np.full((5,3),3.14)#填充一个给定的数
#print(cc,dd,ee)
ff=np.random.random((3,3))#创建一个0~1均匀分布的随机数组成的矩阵
gg=np.random.randint(0,10,5)#low,high,size,dtype,创建0,10之间的随机整数
#print(gg)#[9 5 6 5 0]
hh=np.random.normal(0,1,(3,3))#创建均值为0,方差为1的正态分布矩阵
#print(hh)
'''
[[-0.36283874 -3.07461832 -0.87746909]
 [ 0.00742394  0.32909822  0.23710716]
 [ 0.60038875  0.09438431  0.44745336]]
 '''
#矩阵的基本属性
#print(hh.ndim,hh.shape,hh.size)#2 (3, 3) 9
#矩阵的索引hh[0,0],hh[0]
#j矩阵的切片语法X[start:stop:step]
xx=np.array(range(10))
#print(xx[5::-2])#[5 3 1]反向切片,反方向看,找到索引为5的位置数字是5,然后按步长为2进行查找。
x2=np.array([[12,5,2,4],[7,6,8,8],[1,6,7,7]])
#二维矩阵索引
#print(x2[:2,:3])
'''
两行三列
[[12  5  2]
 [ 7  6  8]]
'''
#print(x2[:3,::2])
'''
所有行,每隔一列
[[12  2]
 [ 7  8]
 [ 1  7]]
'''
#print(x2[::-1,::-1])
'''行列同时被逆序
[[ 7  7  6  1]
 [ 8  8  6  7]
 [ 4  2  5 12]]
'''
#索引和切片可以同时使用,数组切片获得的是数组的视图,而不是副本,因此修改切片会改变原来矩阵的值。
#若要改变数组的值,需要用copy
x2_copy=x2.copy()
#print(x2_copy)
x2_copy[0,0]=5
#print(x2_copy)
'''
[[12  5  2  4]
 [ 7  6  8  8]
 [ 1  6  7  7]]
[[5 5 2 4]
 [7 6 8 8]
 [1 6 7 7]]
'''
#数组的变形reshape(),reshape里面写不写括号都可以
x3=np.array([1,2,3])#[1 2 3]
#print(x3)
x33=x3.reshape((1,3))#[[1 2 3]]
#print(x33)
#通过np.newaxis切片获得行向量
#print(x3[np.newaxis,:])#[[1 2 3]]
x333=x3.reshape(3,1)
#print(x333)
'''
[[1]
 [2]
 [3]]
'''
#通过np.newaxis切片获得列向量
#print(x33[:1,np.newaxis].shape)#(1, 1, 3)

#数组的拼接np.concatenate, np.vstack, np.hstack,np.dstack
y=np.array([1,3,5])
#print(np.concatenate([x3,y]))#[1 2 3 1 3 5]
#数组的分裂np.split,np.hsplit,np.vsplit,np.dsplit
sp=np.array([1,2,3,99,99,3,2,1])
sp1,sp2,sp3=np.split(sp,[3,5])
#print(sp1,sp2,sp3)#[1 2 3] [99 99] [3 2 1]
grid=np.arange(16).reshape(4,4)
#print(grid)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
'''
upper,lower=np.vsplit(grid,[2])
print(upper,lower)
'''
[[0 1 2 3]
 [4 5 6 7]] 
 
 [[ 8  9 10 11]
 [12 13 14 15]]
'''
import numpy as np
d1=np.array([0,1,2,3])
d2=np.arange(6).reshape(2,3)
d3=np.arange(24).reshape(2,3,4)
#print(d1)
#print(d2)
#print(d3)
'''
[0 1 2 3]
[[0 1 2]
 [3 4 5]]
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
'''
#可以将shape(2,3,4)对应为Z,Y,X轴
#用shape返回的属性元祖,从左到右将坐标轴依次命名为axis0,axis1.......,指定哪个轴,就在哪个轴上进行操作,变化。
data=np.array(np.arange(12))
np.random.shuffle(data)
data=data.reshape(3,4)
#print(data)
#print(np.sort(data,axis=0))
'''
[[ 8  4 11  5]
 [ 0  3  1  9]
 [ 6  2 10  7]]
[[ 0  2  1  5]
 [ 6  3 10  7]
 [ 8  4 11  9]]'''
#print(np.sort(data,axis=1))
'''
[[ 5  6  8 11]
 [ 0  3  4  7]
 [ 1  2  9 10]]
'''
#当调用sum,mean,std,var,min,max时,会导致指向的轴被压缩,压缩为一个数值。
data1=np.arange(24).reshape(2,3,4)
#print(data1)
#print(np.sum(data1,axis=0))
#print(np.sum(data1,axis=1))
'''
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
  
[[12 14 16 18]
 [20 22 24 26]
 [28 30 32 34]]
 
[[12 15 18 21]
 [48 51 54 57]]
'''
#注意cumsum,cumprod不缩减轴向,只在指定轴上操作。

#索引与切片中出现:,则该轴继续存在,如果出现数字则该轴消失。
# print(data1[0,0,0])
# print(data1[0,:,:])
# print(data1[0:1,1:2,2:3])
'''
0

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 
[[[6]]]
'''
#数据填充是先填充x轴,其次是y轴.......

numpy的通用函数:

#通过通用函数用向量的方式进行计算几乎总比用python循环实现的计算更加有效,尤其是当数组很大的时候。
#numpy的算术运算符
#‘+’ np.add()
#'-'  np.subtract()
#'*'  np.multiply()
#'/' np.divide()
#'**'  np.power()指数运算
#'%'  np.mod()取模运算
#'abs'  np.absolute()
#三角函数  np.sin()   np.cos()  np.tan()  np.arcsin()   np.arccos()  np.arctan()
#e^2   np.exp(x)
#2^x  np.exp2(x)  np.power(3,x)
#ln(2)   np.log(2)          log2(x)  np.log2(x)            log10(x)   np.log10(x)
#聚合函数,如np.add.reduce()会返回add运算之后的数组中所有元素的和,np.multiply.reduce()会返回multiply运算之后的数组中所有元素的乘积。
#其他的聚合函数:np.sum()  np.prod()计算元素的积,np.mean()   np.std()   np.var()计算方差  np.argmin()找出最小值的索引   np.median()计算中位数
#np.any()验证任何一个元素是否为真  np.all()验证所有元素是否为真

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值