Numpy 学习

numpy是python的一种数据计算的包,首先我想说一下它的优点

在我看来有两点在于:1.可以省略许多计算过程,方便计算。2:相比较于正常的python计算可以加速计算过程。

 def python_sum(n):
    a=[i**2 for i in range(n)]
    b=[i**3 for i in range(n)]
    ab_sum=[]
    for i in range(n):
        ab_sum.append(a[i]+b[i])
    return ab_sum

def numpy_sum(n):
    a=np.arange(n)**2
    b=np.arange(n)**3
    return a+b
numpy_sum(10)

从中可以看出运用python本身的运算和利用numpy的运算的时间差距是非常大的,这也是我们数据分析中喜欢运用numpy的原因。

1.numpy的array方法

最基础的方法就是在array中添加一个数组,这样就可以写出numpy方法中的数组,方便后边利用numpy其他方法运算。

1.1array中运用range方法

跟在正常运算中一样,直接用range方法可以省略掉许多步骤,当你在运算一定范围内的数组时可以节省很多时间。

另外range()前两个数字分别是起始值和终止值,运算时不包括最后一个终止值,而第三个数字则是类似于等差数列的d一样可以有效划分数组类似于奇数偶数组。

1.2array中dtype方法

 如果要规定数组的类型,可以添加dtype,类似于图中的int之外还可以运用float等类型。

1.3numpy中的复制

一般都是使用图中的复制,这样的话存储地址不一样,因此在修改b的时候 a不会因此而变化造成数值不稳定。

以下即是反例:

除此之外,我们可以注意到其中的copy的值,类似于第一张图,copy的值默认为True,因此地址未改变。

但若我们将copy的值改成False,地址又会相同:

当然还有更方便的使用copy()的方法:

id显示出来也是不同的,可以很方便的使用

1.4数组的计算

 加法运算直接是普通的数组加法,但是要注意的是,数组的列或者行的数量需要相同,否则会报错

1.5求平均值

 如果不添加axis的参数的话,那么输出的均值就是数组内所有数字的均值
axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
axis =1 :压缩列,对各行求均值,返回 m *1 矩阵

1.6求中位数

简单的利用median方法就可以求得

1.7求方差

在数据分析中很有用,可以比较数据的离散型

2.numpy数组的区间,等差等比方法

2.1numpy的arange方法

arange方法经常被使用,和range方法相同的点在于可以很好的输出一些固定范围的数组,但是不同点在于range输出的是数组类型,而arange前面加上np.就可以输出array形式的数组。

但我们需要注意的一点就是当里面的数字范围是小数点的时候,终止值也会被包括在内,这涉及到了python内部计算的时候的问题。

2.2numpy的linspace等差数列方法

和range方法类似起始终止是前面两个数,但是最后一个数不是步长, 而是数组中的元素个数。

除此之外还可以用endpoint来决定是否要包括终止值,图中就是包括终止值的,说明endpoint默认值是True,另外还有setstep可以输出步长的大小

在数据分析中这是很实用的方法,可以提供很多的样本

2.3numpy的logspace等比数列方法

与linspace类似,但是多了个base,大抵就是对base这个值来求对数。图中就是base为2,起始值为0值为2的0次方为1,终止值为2的9次方512.。

 同样可以运用于创造多样本数组

 3.numpy中修改维度的方法

3.1resize方法

resize有两种方法,一种有返回值,一种没有返回值

第一种有返回值,是将修改过的数据赋值给新变量,而数组本身不会变化。通知如果维度所包含的元素个数大于或小于本身变量,那么同样也会继续改变size,通过按顺序输出数组本来的数字来构成新的数组

 第二种通过赋值没有返回值,而且会改变a本身的值,其他没什么改变。

另外我们可以引入size方法

 size方法可以显示有多少维度类似于2*2就是4

而len()方法就有些欠缺,并不能将多维数组长度输出

3.2reshape方法

与resize相同之处在于reshape也可以改变维度,但是reshape方法不会改变数组中元素本身,否则会出错。

4.numpy的切片

4.1数组基础切片

与正常python中数组的切片一样,第一个数字为标签起始值,第二个数字为标签终止值(不包括),最后一个数字则为步长。

当不写值的时候第一个值默认为初始值,第二个值默认为终止值,步长为-1时倒叙切片

 另外步长为空默认也是为1

对于多维数组,我们切片的时候可以单独取一个值,作为降一维的“标签”,

4.2按列切片

我们通常可以使用...来表示“所有值”这种含义,在切片的时候逗号前为行逗号后为列。因此此处的。。。表示取行所有值,而后面的数字表示按列的标签开始输出,比如这里从标签1到结尾。

但是要注意好这两种表达是不同的,前者是没有直接取出来行,后者是把行一个个都取出来,然后再取行中间的第几个。在单独取一个值的时候并不会看出有很大问题,但是在对付多列多行的问题的时候就会出错。

 而对于直接书写数组的类型

也是通过逗号前为行,逗号后为列这样一一对应找数字。这里通过r和l就是来说明其中原理也是通过按行取列。

4.3数组切片与数字直接切片

 图中b和c输出结果相同,但是b是直接通过数字切片,而c中关于列的部分是通过数组直接区分【1,2】就是标签为1,2的列。

4.4根据数组范围切片

譬如第一种,对数组中的数字进行比较来输出

还有输出数组中的奇数偶数的操作

 4.5根据Boolean来切片

True的部分就是输出的部分,这里只标记了二三行,因此输出二三行的数据

除此之外还要记住行与列的True的数量需要相同,不然也会报错

5.numpy的random随机数

5.1randn方法

可以输出一定样本内的正态分布,这里用matplotlib的hist方法直观看

5.2rand方法

可以输出0到1内的均匀随机数,括号里输入的是你想要的数组维度

同样可以用柱状图看出随机的分布,与正态分布比起来差距很大,随机数的分布并不是很分明

5.3randint方法

比较常用的随机数方法,由范围以及数组的维度确定,不输入size的时候默认为只返回一个数字

 5.4sample方法

 同样是输出0到1的随机数,括号内表示2行3列控制维度

5.5normal方法

 与前者rand一样表示为正态分布的数据,但这里的数值不局限于0到1,loc是第一个数值,表示以这个数为中心,scale表示为第二个数值,是关于这个数的标准差,宽度。而最后的元组表示为维度

5.6seed方法

通常在数据分析的时候,我们不想随机的样本第二次运行还会改变,因此我们可以通过使用seed方法来限制随机的样本的变化

一个seed可以限制一个random,每次写random都要在前面加一个seed()才能限制。

6.numpy的zeros()和ones()方法

这两种方法能方便的创建一定规模的数组,元素全为0或者全为1这样子。在数据线性分析的时候theta就可以通过这种方法创建。同时我们也可以一定程度上对其切片,以下就是将其切片成01层次间隔的形式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值