Python数据科学手册(2)---Numpy

有效的存储和操作数值数组是数据科学中绝对的基础,Python中有专门的包Numpy和Pandas来应对,本文主要介绍Numpy.

1、理解Python中的数据类型

Python的一个易用之处在于动态输入。静态语言(如Java,C)往往需要每一个变量明确的声明,而动态语言可以跳过这个规定。

2,数组基础

Python中的数组操作几乎等同于与Numpy数组操作,后面介绍的pandas也是构建在Numpy数组的基础之上的。
2.1 数组的属性
一般会这样导入numpy:import numpy as np
每个数组有nidm,shape,size(分别是维度,每个维度三维大小,总长度);另一个有用的属性是dtype,它是数组的数据类型;
2.2 数组索引,获取单个元素
一维数组与Python一样;
在多维数组中,可以用逗号分隔的索引元祖获取元素:
在这里插入图片描述
需要注意的是,与Python列表不同,Numpy数组是固定类型的,这意味着当你试图将一个浮点型的值插入整形数组时,浮点值会被截断成整形,这种截断是自动完成的,不会给提示或警告!
2.3 数组切片
与python列表的标准切片语法相同;
关于数组切片有一点很真要也非常有用,那就是数组切片返回的是数组数据的视图,不是数值数据的副本。这是numpy数组切片与Python列表切片的不同之处!
在这里插入图片描述
如果需要创建副本,需用copy()方法实现;

2.4 数组的变形与拼接
要用好reshape函数来变形;
拼接用concatenate, vstack, hstack;
分裂用split,hsplit, vsplit函数实现;

3,numpy数组的计算:通用函数

numpy提供了一个简单灵活的接口来优化数据数组的计算。是numpy变快的关键是利用向量化操作,通常在其通用函数(ufunc)中实现。

3.1 缓慢的循环
Python的默认实现处理某些操作是非常慢,一部分原因是该语言的动态性和解释性—数据类型灵活的特性决定了序列操作不能像C语言一样被编译成有效的机器码。
例如对序列循环求倒数,这里的处理瓶颈并不是运算本身,而是CPython在每次循环时必须检查数据类型和函数的调度。如果能在编译是进行这样的操作,结果的计算将更加高效。

3.2 通用函数介绍
numpy为很多类型的操作提供了方便,静态,可编译程序的接口,被称作向量操作。我们可以通过简单的数组执行操作来实现,这里对数组的操作将会用于数组的每一个元素。

3.3 探索numpy的通用函数
1,数组的运算
numpy通用函数的的使用方式非常自然,因为它用到了Python原生的算术运算符,标准的加减乘除都可以使用:

x = np.arange(4)
print("x = ",x)
print("x+5 = ",x+5)
print("x-5 =",x-5)
print("x*2 =",x*2)
print("x/2 = ",x/2)
# 输出
x =  [0 1 2 3]
x+5 =  [5 6 7 8]
x-5 = [-5 -4 -3 -2]
x*2 = [0 2 4 6]
x/2 =  [0.  0.5 1.  1.5]

还有逻辑非,**表示的指数运算和%表示的模运算;这些运算符可以组合使用;
2,绝对值
可以用abs()或np.abs()或np.absolute()
3, 三角函数
numpy提供了大量的通用三角函数,如np.sin(), np.cos()等等
4,指数和对数
指数运算:np.exp(), np.exp2(),np.power(arg1,arg2)
对数操作:np.log(), np.log2(), np.log10()分别表示以自然对数,2,10为底的对数运算。

3.4 高级通用函数
1,指定输出:out
2,聚合:reduce
3,外积
任何通用函数都可以用outer方法获得两个不同输入数组的所有元素对的函数运算结果

y = np.arange(1,6)
np.multiply.outer(y,y)
array([[ 1,  2,  3,  4,  5],
       [ 2,  4,  6,  8, 10],
       [ 3,  6,  9, 12, 15],
       [ 4,  8, 12, 16, 20],
       [ 5, 10, 15, 20, 25]])

另一个有用的特性是操作不同的数组,被称为“广播”,将在以后介绍;

4,聚合:最大值,最小值等

面对大量的数据,第一个步骤通常是计算概况统计值,如求和,均值,极大值等等;Python往往也有这样的函数,但是numpy的相关函数在编译码中执行操作,计算更快
举例:求最小值
Python: min(big_array)
numpy: np.min(big_array),big_array.min()
常用的有:
在这里插入图片描述

另外,大多数的聚合都有对NaN值的安全处理策略,即计算时忽略缺失值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值