Python数据分析建模纯干货速览!!!(二)Numpy

在这里插入图片描述

Numpy

  • Numpy 是一个开源的数值计算扩展,可以用来处理大型矩阵,比 python 自身的嵌套列表结构要高效的多
  • 导入 python库使用关键字 import,后面可以自定义库的简称,一般 Numpy 为 np,pandas 为 pd
import numpy #导入库
import numpy as np #简称
from numpy import * 

Numpy 数组对象及其索引

例如我们想让一个列表里面的元素每一个都加1,列表无法进行这样的操作,非常麻烦,而且列表无法进行矩阵元素的运算,所以我们引入 Numpy

从列表创建数组:

list=[1,2,3,4]
a=np.array(list)

从列表传入:

a=np.array([1,2,3,4])

生成全为0数组:

np.zero(5)

生成全为1数组:

np.ones(5,dtype='int')#默认浮点数,但参数 dtype 可以规定数据类型

用 fill 方法将数组设定为指定值:

a=np.array([1,2,3,4])
a.fill(5)#每一个元素设定为5

与列表不同,数组中要求所有元素的 dtype 是一样的,如果传入参数的类型与数组类型不一样,需要按照已有的类型进行转换

a=a.astype('float')
a.fill(2.5)

下面是使用特定方法生成特殊数组

生成整数序列:

a=np.arange(1,10)#左闭右开
a=np.arange(1,10,2)#间隔2

生成等差数列:

a=np.linspace(1,10,10)#从1-10的十个等差数列,都是闭区间

生成随机数:

np.random.rand(10)#0-1左闭右开10个随机数

np.random.randn(10)#标准正态分布

np.random.randint(1,10,10)#1-10随机整数

数组属性

查看数组类型:

type(a)#返回 numpy.ndarray

查看数组中的数据类型:

a.dtype

查看形状,会返回一个元组

a.shape

查看数组里面元素的数目:

a.size

查看数组的维度:

a.ndim

索引和切片

索引第一个元素:

a=np.array([0,1,2,3])
a[0]

修改第一个元素的值:

a[0]=10#重新赋值

切片,支持负索引:

a=np.array([11,12,13,14,15])
a[1:3]

a[1:-2]#取到倒数第二个数的前一个数

a[-4:3]#从倒数第四个元素开始取

省略参数:

a[-2:]#取14 15

a[::2]#间隔2,11 13 15

多维数组及其属性

生成二维数组:

a=np.array([[0,1,2,3],[10,11,12,13]])

查看形状:

a.shape#(2,4) 2行4列

查看总个数:

a.size# 8

查看维数:

a.ndim#2

二维数组传入两个参数索引:

a[1,3]

实际上 python 会把它们看成一个元组(1,3)

单个索引索引一整行内容:

a[1]#第二行

多维数组:

a=np.array([[0,1,2,3,4,5],
            [10,11,12,13,14,15],
            [20,30,40,50,60,70]])

取3,5行:

a[2::2,::2]

切片在内存中使用的是引用机制:改变 b 导致了 a 改变

a=np.array([0,1,2,3,4])
b=a[2:4]
print(b)#[2,3]
b[0]=10
print(a)#[0,1,10,3,4]

python 并没有为 b 分配新的空间来储存它的值,而是让b指向了a所分配的内存空间,因此,改变b会改变a的值,这种情况在列表中不会出现;

好处:很大的数组不用大量复制多余的值,节约空间;缺点:一个值改变另一个值

copy()来解决,会申请新的内存

a=np.array([0,1,2,3,4])
b=a[2:4].copy()
b[0]=10

花式索引:

实现任意位置的操作,需要使用花式索引 fancy slicing

a=np.arange(0,100,10)

花式索引需要指定索引位置:

index=[1,2,-3]
y=a[index]
print(y)#[10,20,70]

布尔数组来花式索引:

mask 必须是布尔值,长度必须和数组长度相同

mask=np.array([0,2,2,0,1,0,0,1,0],dtype=bool)
a[mask]

取对角线值:括号里的数值按照行列对应即可

a=np.array([[0,1,2,3,4,5],
            [10,11,12,13,14,15],
            [20,30,40,50,60,70]])
a[(0,1,2),(1,2,3)]#[1,12,50]

不完全索引:

只给定行索引,返回整行:

y=a[:3]

where 语句:

where(array)返回所有非零元素的索引:

a=np.array([0,12,5,20])

判断:

a>10#会返回布尔值

数组中大于10元素的索引位置:

np.where(a>10)

where 返回值是一个元组,返回的是索引位置

a[a>10]
a[np.where(a>10)]

数组类型

a=np.array([1.5,-3],dtype=float)

asarray 函数:数组类型调整

a=np.array([1,2,3])
np.asarray(a,dtype=float)#会显示浮点数

astype 方法:

a=np.array([1,2,3])
a.astype(float)#会显示浮点数,但并未复制给a,a仍然是[1,2,3]

sort 函数:排序但不赋值

a=np.array([1,2,5,3])
np.sort(a)

argsort函数:返回从小到大排列在数组中的索引位置

a=np.array([1,2,5,3])
order=np.argsort(a)

其他操作:各有两种写法,函数形式或者方法形式

#求和
a=np.array([1,2,6,5,3])
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)
a.cov()

多维数组操作:

#数组形状
a=np.arange(6)
a.shape=2,3

#reshape 不会改变原来数组的值,而是返回一个新的数组
a.reshape(2,3)

#转置
a.T
a.transpose()

数组连接

有时候需要将不同数组按照一定的顺序连接起来:

Concatenate((a1,a1,…,aN),axis=0)

这些数组要用()包括到一个元组中去,除了给定的轴外,这些数组其他轴的长度必须是一样的

x=np.array([[0,1,2],[10,11,12]])
y=np.array([[50,51,52],[60,61,62]])
print(x.shape)
print(y.shape)

#第一维进行连接
z=np.concatenate((x,y))
#array([[ 0,  1,  2],
#       [10, 11, 12],
#       [50, 51, 52],
#       [60, 61, 62]])

#第二维连接
z=np.concatenate((x,y),axis=1)
#array([[ 0,  1,  2, 50, 51, 52],
#      [10, 11, 12, 60, 61, 62]])

#x 和 y 是相同形状的,还可以连接成三维数组,concatenate没有这样的功能
z=np.array((x,y))
#array([[[ 0,  1,  2],
#        [10, 11, 12]],

#       [[50, 51, 52],
#        [60, 61, 62]]])

以上三种连接方式,numpy 均提供有对应的函数:

  • vstack
  • hstack
  • dstack
np.vstack((x,y))
np.hstack((x,y))
np.dstack((x,y))

Numpy 内置函数:

常用内置函数:

np.abs()#绝对值
np.exp()#自然对数指数幂
np.median()#中位数
np.cumsum()#累计求和

具体内置函数详见:
Numpy 内置函数文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值