数据分析----Numpy

一、简介

NumPy是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。(摘自百度百科)

二、导入numpy包

使用前需要导入numpy包,方法如下:

import numpy
import numpy as np  #将np设为numpy的缩写
from numpy import *

三、数组(array)

有序排列的同类数据元素的集合称为数组
有序:可进行索引操作
同类:数组中的元素数据类型相同(这也是数组与列表的不同点)

四、数组的索引

1、一维数组

(1)索引第n个元素
例如取数组中的第三个元素

import numpy as np
a=np.array([0,1,2,3,4,5])   #定义一个一维数组
print(a[2])

(2)修改第n个元素
例如将第三个元素修改为10

import numpy as np
a=np.array([0,1,2,3,4,5])   
a[2]=10
print(a)

结果输出为[0,1,10,3,4,5]
(3)一维数组的花式索引
a.输入指定位置的花式索引
语法:
l=[索引1,索引2,…,索引n]
print(a[l])
例如取数组b的第1,3,5位元素

import numpy as np
b=np.array([0,10,20,30,40,50,60,70,80,90])
l=[0,2,4]
print(a[l])

输出结果为[0,20,40]
b.布尔型花式索引
例如取数组a中的第1,2,4位元素

import numpy as np
a=np.array([0,1,2,3,4,5])
l=np.array([1,1,0,1,0,0],dtype=bool) #将数组类型转换为布尔型
print(a[l])

输出结果为[0,1,3]

2、多维数组

(1)索引第x行第y列的元素

例如取第1行第2列的元素

import numpy as np
a=np.array([[0,1,2,3],[4,5,6,7]]) #定义一个二维数组,多维数组每一行的元素个数要相等
print(a[0,1])

注意:行与列的索引都从0开始
(2)取第n行
例如取数组a的第二行

print(a[1])

(3)多维数组的花式索引
a.输入指定位置的花式索引
语法:a[(行1,行2,…,行n),(列1,列2,…,列n)]
例如取数组a中第2行第3列和第4行第4列的元素

import numpy as np
a=np.array([[0,1,2,3],
            [4,5,6,7],
            [8,9,10,11],
            [12,13,14,15]])
print(a[(1,3),(2,3)])

结果为[6,15]
b.布尔型花式索引
例如取数组a第3列第1和第4位元素

import numpy as np
a=np.array([[0,1,2,3],
            [4,5,6,7],
            [8,9,10,11],
            [12,13,14,15]])
mask=np.array([1,0,0,1],dtype=bool)
a[mask,2]

输出结果为[2,14]

五、数组的切片

数组的切片既支持正索引也支持负索引

1.一维数组

a[起点:终点(不包含):步长]

2.多维数组

a[行起点;行终点(不包含):步长,列起点;列终点(不包含):步长]
例如:

import numpy as np
a=np.array([[0,1,2,3],
            [4,5,6,7],
            [8,9,10,11],
            [12,13,14,15]])
print(a[1::,:2:])

结果为[[ 4 5] [ 8 9] [12 13]]


注意:花式索引与切片不同 切片在内存中采用引用机制,改变切片也会改变原数组 而花式索引返回的是原对象的一个复制而不是引用。


六、数组的常用操作

1.类型转换

语法:(1) a=np.array([1,2,3,4],dtype=数据类型)
(2) a=a.astype(数据类型)

2.生成全0数组

语法:np.zeros(个数)

import numpy as np
c=np.zeros(4)
print(c)

由于数组默认数据类型为float,所以结果为:
[0. 0. 0. 0.]
若要整数形式可将第二行改为:

c=np.zeros(4,dtype=int)

生成全1数组将zeros改为ones即可

3.fill方法

语法:a.fill(指定值)
例如将数组c中的元素全改为5

import numpy as np
c=np.zeros(4,dtype=int)
c.fill(5)
print(c)

结果为[5,5,5,5]
注意:如若传入参数与数组类型不同,需要转换为同一类型

4.生成等差数列

语法:(1)a=np.arange(起点,终点(不包含),步长)
(2)a=np.linspace(起点,终点(包含),个数)

5.生成随机数

语法:a=np.random.rand(个数)

6.查看类型

以下面的代码为例:

import numpy as np
a=np.array([[0,1,2,3],
            [4,5,6,7],
            [8,9,10,11],
            [12,13,14,15]])
print(type(a))
print(a.dtype)

输出结果为:
<class ‘numpy.ndarray’>
int32
由此可知type()查看的是变量的数据类型,dtype查看的是数组中元素的数据类型~~(我也不知道该怎么说,但大概就是那么个意思)~~

7.查看形状

(1)一维数组

import numpy as np
b=np.array([0,10,20,30,40,50,60,70,80,90])
print(b.shape)  #写成shape(b)也可以

输出结果:(10,)
表示一行有10个元素
(2)多维数组

import numpy as np
a=np.array([[0,1,2],
            [4,5,6],
            [8,9,10],
            [12,13,14]])
print(a.shape)

输出结果:(4, 3)
表示有4行3列

8.查看数组里元素的数目

使用方法如下:

import numpy as np
b=np.array([0,10,20,30,40,50,60,70,80,90])
print(b.size)

9.查看数组维度

import numpy as np
b=np.array([0,10,20,30,40,50,60,70,80,90])
print(b.ndim)

10.排序

(1)sort函数

import numpy as np
a=np.array([6,8,4,2,9])
b=np.sort(a)
print(b)
print(a)

输出结果:
[2, 4 ,6 ,8 ,9]
[6, 8, 4 ,2, 9]
注意:原数组不变
(2)argsort函数
返回从小到大的排列在数组中的索引位置

a=np.array([6,8,4,2,9])
b=np.argsort(a)
print(b)
print(a[b])

输出结果为:
[3 ,2 ,0 ,1, 4] #这是索引
[2 ,4 ,6 ,8 ,9]

除了以上这些还有:

功能语法
求和np.sum(a)/a.sum()
求最大值np.max(a)/a.max()
求最小值np.min(a)/a.min()
求均值np.mean(a)/a.mean()
求标准差np.std(a)/a.std()
相关系数矩阵np.cov(a,b)
取绝对值np.abs(a)
求指数np.exp(a)
求中值np.median(a)
求累计和np.cumsum(a)

除了这些还有很多。。。。

七、多维数组的常用操作

1.数组形状

(1)shape
语法:a.shape=行,列

import numpy as np
b=np.array([0,10,20,30,40,50,60,70,80,90])
b.shape=2,5
print(b)

输出结果为:
[[ 0, 10 ,20 ,30 ,40]
[50 ,60, 70 ,80, 90]]
(2)reshape
语法:a2=a1.reshape(行,列)

import numpy as np
b=np.array([0,10,20,30,40,50,60,70,80,90])
c=b.reshape(2,5)
print(c)
print(b)

输出结果为:
[[ 0 10 20 30 40]
[50 60 70 80 90]]
[ 0 10 20 30 40 50 60 70 80 90]
由此可见,reshape并没有改变原数组

2.转置

即行列互换,如2行3列变3行2列

import numpy as np
a=np.array([[0,1,2],
            [4,5,6],
            [8,9,10],
            [12,13,14]])
print(a.T) #写成a.transpose()也可以

输出结果为:
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]]

3.数组拼接

(1)concatenate
语法:np.concatenate((数组1,数组2,…,数组n),axis=0)
axis=0:纵向拼接
axis=1:横向拼接
默认axis=0

import numpy as np
a=np.array([[0,1,2,3,4],[5,6,7,8,9]])
b=np.array([[10,11,12,13,14],[15,16,17,18,19]])
c=np.concatenate((a,b),axis=0)
d=np.concatenate((a,b),axis=1)
print(c)
print(d)

输出结果为:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
[[ 0 1 2 3 4 10 11 12 13 14]
[ 5 6 7 8 9 15 16 17 18 19]]
(2)将二维数组连接成三维数组
语法:数组=np.array((数组1),数组2,…,数组n))

import numpy as np
a=np.array([[0,1,2,3,4],[5,6,7,8,9]])
b=np.array([[10,11,12,13,14],[15,16,17,18,19]])
e=np.array((a,b))
print(e)

输出结果为:
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]

[[10 11 12 13 14]
[15 16 17 18 19]]]
(3)vstack,hstack,dstack
纵向堆叠:np.vstack((数组1,数组2,…,数组n))
横向拼接:np.hstack((数组1,数组2,…,数组n))
连接成三维数组:np.dstack((数组1,数组2,…,数组n))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值