相关参考资料
- bilibili视频可参考:
数据分析——numpy、pandas、matplotlib
莫烦 Python 数据处理教程- 相关书籍可参考:
《Python数据科学手册》
NumPy,便是Numerical Python的简称。意为:数字的Python。
在某些方面,NumPy数组与Python内置的列表类型非常相似。但随着数组在维度上变大,Numpy数组提供了更高效的存储和数据操作。NumPy数组是Python数据科学工具生态系统的核心。
注:转载请注明出处
在一般的Python代码中,变量所采用的是动态数据类型,如下段代码:
x = 4
x = 'four'
这里已经将变量x从整型变成了字符串类型,这便是Python程序所特有的灵活性,但这也会使得每种类型的结构体中含有大量的额外信息。以便支持这种灵活性的操作。
又如下面的Python列表类型:
list1 = [True, '2', 3]
在这个Python的列表类型中,每个元素的数据类型都可以不同,为保证这种灵活性,每一个元素必须包含各自类型信息,也就是说,列表中的每一个元素都是一个完整的Python对象。 而与此相对应,固定类型的NumPy式数组缺乏这种灵活性,但能更有效地存储和操作数据。
也就是说,NumPy数组包含同一类型的值,而Python列表中元素类型可以不一致。这便是NumPy数组与Python列表的不同之处。
在使用NumPy模块之前,需进行导入,惯例一般将其名称设置为np。
import numpy as np
首先,可以用np.array从Python列表创建数组:
array1 = np.array([1, 2, 3, 4, 5])
print('NumPy数组为: ',array1)
print('Python列表为:', [1, 2, 3, 4, 5])
NumPy数组为: [1 2 3 4 5]
Python列表为: [1, 2, 3, 4, 5]
注意:
1. NumPy数组与Python列表的形式不同:
NumPy数组无逗号,用空格进行分隔;
Python列表则使用逗号进行分隔。
2. NumPy数组必须包含同一类型的数据,如果类型不匹配,NumPy会向上转换,即向更高级别的数据类型转换,如整型向浮点型转换:
array2 = np.array([3.14, 1, 2])
print(array2)
[3.14 1. 2. ]
若希望明确设置数组的数据类型,可以用dtype关键字:
array3 = np.array([3.14, 1, 2], dtype = 'int32')
print(array3)
[3 1 2]
注意
1.dtype后的格式若为int、float,则可不加引号;而若为int32、float32等,则必须加引号。
不同于Python列表,NumPy数组可以被指定为多维的。如下利用嵌套列表初始化多维数组:
array4 = np.array([range(i, i+3) for i in [2, 4, 6]])
print(array4)
[[2 3 4]
[4 5 6]
[6 7 8]]
在面对大型数组的时候,用Numpy内置的方法从头创建数组是一种更高效的方法。
(1)np.zeros:值全为 0 的数组
array5 = np.zeros(10, dtype = int) #一维数组
array6 = np.zeros((3, 5), dtype = int) #二维数组
print('array5 =',array5)
print('array6 =',array6)
array5 = [0 0 0 0 0 0 0 0 0 0]
array6 = [[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
(2)np.ones:值全为 1 的数组
array7 = np.ones(10, dtype = int) #一维数组
array8 = np.ones((3, 5), dtype = int) #二维数组
print('array7 =',array7)
print('array8 =',array8)
array7 = [1 1 1 1 1 1 1 1 1 1]
array8 = [[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]]
(3)np.full:值全为 设置值 的数组
array9 = np.full(10, 3.14) #一维数组
array10 = np.full((3, 5), 3.2) #二维数组
print('array9 =',array9)
print('array10 =',array10)
array9 = [3.14 3.14 3.14 3.14 3.14 3.14 3.14 3.14 3.14 3.14]
array10 = [[3.2 3.2 3.2 3.2 3.2]
[3.2 3.2 3.2 3.2 3.2]
[3.2 3.2 3.2 3.2 3.2]]
(4)np.arange:线性序列数组,如**range()**类似(左闭右开区间)
array11 = np.arange(0, 20, 2)
print('array11 =',array11)
array11 = [ 0 2 4 6 8 10 12 14 16 18]
(5)np.linspace:均匀分配序列数组 (闭区间)
array12 = np.linspace(0, 1, 5)
print('array12 =',array12)
array12 = [0. 0.25 0.5 0.75 1. ]
(6)np.random.random:0~1均匀分布的随机数
array13 = np.random.random((3,3))
print('array13 =',array13)
array13 = [[0.351325 0.21198856 0.33438375]
[0.34795518 0.94751665 0.53576009]
[0.90172469 0.8647817 0.15762703]]
(7)np.random.normal:均值、标准差为设置值的正态分布随机数数组
array14 = np.random.normal(0, 1, (3,3))
print('array14 =',array14)
array14 = [[ 0.78272478 0.53343682 2.28611418]
[ 0.7060398 -1.03404058 -0.4452683 ]
[ 1.62295592 0.45360629 1.43592776]]
(8)np.random.randint:区间为设置值内的随机整型数组
array15 = np.random.randint(0, 10, (3,3))
print('array15 =',array15)
array15 = [[4 5 0]
[8 6 1]
[7 4 3]]
(9)np.eye:生成设置大小的单位矩阵
array16 = np.eye(3)
print('array16 =',array16)
array16 = [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
(10)np.empty:生成未初始化数组,值为任意值。
array17 = np.empty(3)
print('array17 =',array17)
array17 = [1. 1. 1.]
以上便是NumPy最基础的概述以及其创建方法,本节的Jupyter notebook代码与readme文件已上传至GitHub,此外,还有英文版的《PythonDataScienceHandbook》的Jupyter notebook文件也已经开源,Github代码点击则可查阅。