numpy类

numpy导包

使用的时候第一步就是导包嘛,但numpy导包要注意一点

import numpy as np

普通导包方式就是import numpy,但我们在这里加上了as np,这就相当于给numpy这个包给了一个新的引用名称np,肯定有人好奇,为什么要这样写,因为科学界的人都这样写的,约定俗成嘛,大家也都是这样写的,现在很多的数据分析书里面也是这样介绍的,所以我们也是遵循这个规则

numpy数组

创建numpy数组

首先我们要想一个问题,我们要创建numpy数组肯定要往里面放数据呀,但这个数据我们是用什么样的方式来存储呢,我们必须要用现有的python数据结构出发,python现有的数据结构主要就有列表,元组,字典

  • 我们先试试列表

    data1 = [1,2,3,4]
    arr1 = np.array(data1)
    print(arr1)
    

    打印结果:[1 2 3 4]
    我们打印出来之后就不是列表了,变成数组了,因为中间没有逗号了

  • 接下来我们创建多维数组看看

    data2 = [[1,2,3,4],[5,6,7,8]]
    arr2 = np.array(data2)
    print(arr2)
    

    打印结果:[[1 2 3 4]
    [5 6 7 8]]
    如果大家自己运行试试的话,我们就会发现他给我们自动分行了,在这里我是手打的,可能不是那么清晰,大家最好是自己运行一下试试,这个它体现的方式是两维四列

numpy数组属性

这两个属性就是dtype和shape,我们一一说明

dtype肯定与类型有关
print(arr1.dtype)
print(arr2.dtype)

两个输出结果:
int32
int32
为什么回事int32呢,这就要说一下python的这个dtype具有一个自动推导机制,你的数字不超过int32的范围,它就推导为int32,如果超过了int32,没超过int64的话,就自动推导为int64
当然了,这个dtype类型也是可以指定的

data1 = [1,2,3,4]
arr1 = np.array(data1,dtype = int64)
print(arr1.dtype)

这时输出结果就变成了int64,这个dtype就是你自己指定的

shape是形状,也就是表示数组每一维度的数量,n行m列这样的形式
  • 上面我们创建了一个二行四列的数组,我们输出一下他的形状我们看一下他的输出

    print(arr2.shape)
    

    运行结果:(2, 4)

  • 我们再试试一维数组的形状是什么样的

    print(arr1.shape)
    

    运行结果:(4,)
    这个有点意思呀,我们发现这个4是列数,但是输出的时候这个4却在行的位置,这是为什么呢,其实后面(4,)的意思就是只有一个4,那个逗号就可以当做不存在,就和python基础结构中的元组一样,你可以元组里面只有一个值,但是一个值的话后面必须要有一个逗号

数组创建函数

zeros函数

我们继续顾名思义,zeros就是0的意思,接下来我们使用zeros函数创建数组,带着大家感受一下

  • 我们先创建一个一维数组

    print(np.zeros(3))
    

    运行结果:[0. 0. 0.]
    上面这个命令就是创建都为0的单位数组,列数为3,但是大家应该发现了,每个零后面都有一个小数点,这是因为默认是浮点型的数据

  • 上面我们创建的是一维的,如果我们要创建多维的呢

    print(np.zeros((3,4)))
    

    运行结果:[[0. 0. 0. 0.]
    [0. 0. 0. 0.]
    [0. 0. 0. 0.]]
    我们要创建三行四列的数组的话,就要用元组的方式,将3,4放在元组中作为参数

ones函数

这个函数就是创建值都为1的数组,我们根据上面的如法炮制

  • 一维数组

    print(np.ones(3))
    

    运行结果:[1. 1. 1.]

  • 创建多维数组

    print(np.ones((3,4)))
    

    运行结果:
    [[1. 1. 1. 1.]
    [1. 1. 1. 1.]
    [1. 1. 1. 1.]]

empty函数

这个函数就和上面的两个不一样了,这个函数的目的是创建随机的垃圾数值的数组,我们以后做数据分析的话,要提前有一些垃圾数值,我们要是不想自己写的话,就可以使用这个函数,创建一些垃圾数值

  • 创建一维数组

    print(np.empty(3))
    

    运行结果:[1. 1. 1.]

  • 创建多维数组

    print(np.empty((3,4)))
    

    运行结果:[[1. 1. 1. 1.]
    [1. 1. 1. 1.]
    [1. 1. 1. 1.]]

  • 大家的疑惑:哎,不是说是创建随机的垃圾数值嘛,怎么输出的结果却和上面ones函数的值一模一样呢,是因为python中也有偷懒机制,如果你之前创建过了,它直接就取出之前内存中的值来使用,我们把之前的内容注释了,然后再运行一下看看结果

    print(np.empty((3,4)))
    

    运行结果:[[ 1.48539705e-312 -3.24721943e-109 1.09048209e-311 1.09048209e-311]
    [ 1.09048209e-311 2.33419537e-313 1.50661701e-312 1.16566772e+253]
    [ 1.09048209e-311 1.16546346e+166 2.27438781e+161 4.11368246e+223]]

arange函数

这个函数就类似我们python中使用的range函数,都是创建范围内的值

print(np.arange(10))

运行结果:[0 1 2 3 4 5 6 7 8 9]

print(np.arange(5,15))

运行结果:[ 5 6 7 8 9 10 11 12 13 14]

eye函数和identity函数

这两个函数的作用类似,都是创建正方形的单位矩阵,单位矩阵就是斜对角线都为1的矩阵,中间只要放一个参数就行,这个参数就是n行n列的单位矩阵

print(np.eye(3))
print(np.identity(3))

运行结果:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]

这两个函数的运行结果都是这样的,但我相信在这里就有朋友要问了,我如果非要用这两个函数创建长方形矩阵呢,当然也是可以的,但是结果可能就和你想的有点差别了

print(np.eye(4,2))

为什么这个函数写法不一样了,按照之前的写法,这个函数应该这样写print(np.eye((4,2)))
但这样写会报错,这个需要大家注意一下

按照我们上面的理解,这个函数创建的应该是四行两列的长方形单位矩阵
但实际的运行结果:
[[1. 0.]
[0. 1.]
[0. 0.]
[0. 0.]]
其实后面的那个参数2是截取,就是截取前两列的意思,就不可能存在长方形的单位矩阵这种东西,所以我们在这里只是对print(np.eye(4))这个的结果截取了前两列值而已

like后缀的函数(zeros_like,ones_like,empty_like)

这三个函数分别就是创建形状相同的值全为0,1,垃圾值的数组

data1=[[2,3,4],[1,2,4]]
arr1 = np.array(data1)
print(arr1)

print(np.ones_like(arr1))
print(np.zeros_like(arr1))
print(np.empty_like(arr1))

前三行代码是创建一个两行三列的数组,后三行代码的意思就是和arr1数组创建形状相同的数组
运行结果:
[[1 1 1]
[1 1 1]]
[[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]]
注意:empty_like是创建同样行列的垃圾值,但是如果上面创建过同样类型的值的话,它就会直接调用之前内存中的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值