python数据分析-常用数据分析库之Numpy(上)

Numpy

在数据分析中能多用numpy中的函数就多用numpy中的函数处理数据,因为当数据量很大时,效率会差很多,举个例子,同样是把数值加1,如果用列表的循环就要用循环对每个元素进行处理,但是数组可以同时进行计算。

print([i +1 for i in [1,2,3]])
a = np.array([1,2,3])
print(a +1)

数组的创建和查看

np.array()只接受一个传参,所以括号要把多维数组括起来(一个嵌套的列表)

a = np.array([[1,2,3,4],[5,6,7,-2],[12,11,67,988]],dtype = int) #array中的下标和单维变量中的元素都是下标从0开始的。
a = np.diag([4,5,6,7]) #创建一个自定义对角线元素的矩阵,除了自定义的对角线元素外其他元素全都为0。
a = np.arange(0,11,0.5) #创建0到11等差为0.5的等差数列
a = np.linspace(1,10,11,endpoint = False) #创建1到10的,总共11个元素的等差数列,endpoint表示不取到最后一个数
a = np.zeros([5,5]) #创建一个5行5列元素全为0的数组
a = np.ones([6,6]) #创建一个6行6列元素全为1的数组
a = np.eye(6) #创建一个6行6列对角线元素全为1的数组(单位矩阵)
a.shape #查看数组是几行几列的
a.ndim #查看数组的维度,这里的维度是指有行和列(可以理解为空间直角坐标系的x和y轴),不是指数组中有几行几列,注意不要理解错了。
a.size #查看数组中有多少个元素
a.dtype #查看数组中的元素类型

Numpy随机数的生成

np.random.seed(1234) #固定产生的随机数。随机数是由随机种子根据一定的计算方法计算出来的数值。所以,随机种子一定,那么产生的随机数就不会变。
np.set_printoptions(precision=2) #控制生成的随机小数的位数。
np.random.random([3,4]) #产生0到1之间的随机浮点数,可以通过传入列表或元素产生数组。
np.random.rand(3,4) #根据传入的参数可以生成一维(rand(3))或二维(rand(3,4))或三维(rand(3,4,3))的随机数组。
np.random.randint(0,101,size=100) #随机产生100个随机整数在0到101之间。
np.random.randint(0,101,size=[10,10]) #随机产生10行10列的随机整数在0到101之间,可以传入列表和元组。
np.random.uniform(low=0,high=101,size=[10,10]) #随机产生10行10列的随机整数在0到101之间,均匀分布的(每个数出现的概率是一样的)。
np.random.normal(10,13,size=[10,10]) #产生均值为10,标准差为13,的正态分布,如果不指定均值和标准差则默认生成标准正态分布。
np.random.randn(10,10) #生成10行10列的标准正态分布的随机数(均值为0,标准差为1)
np.random.shuffle(a) #对数据做随机将排序,作用于原数据。
np.random.permutation(a) #对数据做随机将排序,返回的是视图,对原数据没有修改。 

np.logspace() 函数的原理

b = np.linspace(1,5,11)
print(b)
print(2 ** b)
a = np.logspace(1,5,base=2,num=11) #创建一个等比数列有11个元素,原理是以等差数列作为幂,以2作为底
a

数组的索引和切片

数组的行和列下标也是从0开始
(1)普通索引
(2)花式索引

(1)普通索引

a = np.array([[1,2,3,4],[5,6,7,-2],[12,11,67,988]],dtype = int) #array中的下标和单维变量中的元素都是下标从0开始的。
b = np.array(((8.5,1,2,3,4.1),(5,6,7,8,9),(10,11,12,13,14),(15,16,17,18,19)))
a[0,0:3] #取第一行的下标0到2的元素,左闭右开,最后的下标为3的元素取不到。
a[1,-1] = 8 #修改元素
b[2,3] #访问第3行第4列的元素,等价于b[2][3]。
b[:,2:4] #访问所有行,第3到5列(不包括第5列)。
b[1:3] #访问2、3两行,等价于b[1:3,:]。
b[b>2.5] #返回数组中所有大于2.5的元素。
b[~(b>2.5)] #返回数组中所有小于2.5的元素,等价于b[b<=2.5]。
b[(b>2.5) & (b<10)] #返回数组中所有大于2.5且小于10的元素,即把对应print((b>2.5) & (b<10))为True位置的元素取出来。

(2)花式索引

b = np.array(((8.5,1,2.5,3,4.1),(5,6,7,8,9),(10,11,12,13,14),(15,16,17,18,19)))
print(b)
b[[2,0]] #取出数组的第3行和第1行,并且第2行在第1行前面。
b[[2,1],[3,2]] #取出第3行第4列和第2行第3列的元素,中括号内的数字首首对应,尾尾对应(2和3对应一个元素,1和2对应一个元素)。
b[:,[3,1,4]] #取出所有行及对应的4,2,5列有顺序限制。
b[[2,1]][:,[4,2,3]] #取出第3和2行,第5,3,4列对应的元素,有顺序限制。 

b[:,1]和b[:,[1]]的区别(主要是返回数据的维度的区别)

b = np.array(((8.5,1,2.5,3,4.1),(5,6,7,8,9),(10,11,12,13,14),(15,16,17,18,19)))
print(b[:,1])
print(b[:,1].ndim)
print('======================')
print(b[:,[1]])
print(b[:,[1]].ndim)

copy()函数的用法

a = np.array([[1,2,3,4],[5,6,7,-2],[12,11,67,988]],dtype = int) #array中的下标和单维变量中的元素都是下标从0开始的。
b = a
b[0,0] = 100
print(b) #视图上修改,原数据也会改变
print(a)
c = a.copy() #一般可以先复制出一份数据再进行处理
c[0,0] = 333
print(c)
print(a) 

数组形状改变

b.reshape()和b.resize()和b.shape()的区别

b = np.array(((8.5,1,2.5,3,4.1),(5,6,7,8,9),(10,11,12,13,14),(15,16,17,18,19)))
c = b.reshape(10,2) #改变数组的形状,不改变原数组的形状,可通过赋值新的变量来利用新形状的数组
print(c) #说明原数组没有被改变
print(b)
d = b.resize(10,2) #返回值为None,且原数组被改变
print(d)
print(b)
b.shape = (10,2) #改变数组的形状,原数组的形状改变,这里我一般传元组进去,列表也可以。
b

b.ravel()和b.flatten()和b.reshape()的区别

b = np.array(((8.5,1,2.5,3,4.1),(5,6,7,8,9),(10,11,12,13,14),(15,16,17,18,19)))
print(b)
b.ravel() #将数组降为一维(横向),就是一行接一行拼接在后面,对元素修改原数组的元素会改变。
b.ravel(order = 'F') #将数组降为一维(纵向),就是一列接一列拼接在后面。

b.flatten() #将数组降为一维(横向),就是一行接一行拼接在后面,该函数有返回值,对元素修改原数组的元素不会改变。
b.flatten(order = 'F') #将数组降为一维(纵向),就是一列接一列拼接在后面,该函数有返回值。

b.reshape(-1) #数组降为一维(横向),就是一行接一行拼接在后面,该函数有返回值(和b.reshape(-1,)一样 ),对元素修改原数组的元素会改变。
b.reshape(-1,1) #将数组变为一列

b.ravel()[3] = 100
print(b)

b.flatten()[3] = 200
print(b)

b.reshape(-1)[3] = 300
print(b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值