python数据处理基础之numpy - 基础篇

从今天开始,我们一起来学习python数据处理基础~我们将从一些基本的工具,如numpy, pandas等学起;然后结合这些工具学习概率论、统计学、一般数理统计方法等。
本章我们主要一起学习什么是 numpy,为什么我们要学习使用numpy。以及介绍下numpy中主要的数据结构ndarray

1 导图

(建议看每一章时,先把此导图打印出来对着看,好让自己对整体内容有个大概的把握与知道自己学习到哪个位置:)我自己做此笔记也是这样,把导图都打印出来,然后对着自己的笔记回顾,看完哪里就去哪里打个勾表示复习过一遍了)

2 为什么要用 numpy?

numpy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。

这是因为:

  1. numpy是在一个连续的内存块中存储数据,独立于其他Python内置对象。numpy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,numpy数组使用的内存更少。
  2. numpy可以在整个数组上执行复杂的计算,而不需要Python的for循环。

总结起来就是两点:1. 速度快;2、操作简单方便

使用numpy库先得导入之,我们常导入并重命名其为 np:

导入numpy并重命名为np
1
import numpy as np

现在我们知道numpy这个科学库是用来处理大数组数据的。我们知道在数学计算中,很多场景需要用到数组计算。最好想的就是线性代数,比如用2维数组表示一个矩阵,然后还要算矩阵的点积等运算。再比如说遍历大数组、对大数组每个元素做平方计算等,numpy都可以高效地完成任务。

那么,他是怎么完成大数组的表示的呢?又是怎么完成大数组的计算?我们下面继续学习之。

3 多维数组 ndarray(N-Dimensions Array)

如我们上一节所说,numpy最牛逼的功能在于高效处理大数组数据。所以,它必须有一个表示大数组的数据结构 – 那就是 ndarray。我们可以简单地使用 array()方法创建一个ndarray,并查看下他的类型

创建并查看ndarray数据类型
1
2
ndarray = np.array([1, 2, 3])
print(type(ndarray)) # 打印结果为 <class 'numpy.ndarray'>,可见,使用array()方法创建了一个ndarray多维数组

3.1 shape与dtype

上面的代码我们很轻松地创建了一个一维数组,但是之所以叫作 ndarray, (N-Dimension Array),多维才是其特色所在。其中,ndarray有两个最重要的属性: shape & dtype,我们看下面的示例:

创建一个2维ndarray,并查看其shape&dtype信息
1
2
3
4
5
6
7
8
ndarray = np.random.rand(2, 3) # 随机创建一个2*3的二维数组
print(ndarray)
print(ndarray.shape) # (2, 3), shape表示2*3
print(ndarray.dtype) # float64 ,表示数组里每个元素都是浮点型数字

===> out:
[[ 0.52945781 0.07767347 0.64758565]
[ 0.71608412 0.49497966 0.33797517]] 输出一个2*3的二维数组

可见主要的两个属性:

  • shape - 表示数组的维度
  • dtype - 表示数组元素的数据类型

3.2 创建ndarray

我们上节已经展示了怎样创建ndarray,其实ndarray有多种创建方法,在本章开头的思维导图中罗列了各种方法,我这里就不全部介绍了,这里主要展示一下关键的一些代码及结果,方便大家直观地学习。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// array方法
ndarray = np.array([[1,2,3], [4,5,6]]) #直接根据传入的list,成生多维数组
==> out:
[[1 2 3]
[4 5 6]]
----------

// zeros方法,ones、empty方法与之差不多
ndarray = np.zeros((2,3)) # 创建一个2*3数组,并将内容者置为0
==> out:
[[0. 0. 0.]
[0. 0. 0.]]
----------

// full,与zeros、ones之流相似,只不过是可以指定元素初始值
ndarray = np.full((2,3), 10)
my_print(ndarray)
==> out:
[[10 10 10]
[10 10 10]]
----------

元素的类型dtype虽说是重要的属性,但是一般用的到情况不多,因为numpy太智能了,会自动地根据你赋的值来确定要使用的数据类型。当然,你也可以使用 astype(type)方法改变之。

4 思考题

  • numpy是用于解决什么问题的?
  • numpy的数组处理较之python原生的list有何优点?
  • numpy的主要数据结构是什么?
  • 如何成生ndarray
  • 试写代码生成一个 4*4的2维数组,把所有元素初始化为0
  • 试写代码生成一个由数字1-99组成的(3*3*11)的3维数组

5 引用

  1. 《利用python进行数据分析》 - WesMcKinney著,SeanCheney译 - WesMcKinney是pandas的开发者,所以必须是讲解numpy、pandas等数据处理工具最权威的专家了,他的这本书写的很简洁很易读,SeanCheney翻译的也是非常完美。十分值得推荐的。