NumPy(Numerical Python)科学计算和数据分析的基础库
导入方式:import numpy as np
NumPy功能
- ndarray 多维数组对象(n-dimensional array)
存储单一数据类型的快速、高效的多维数组对象 - ufunc 统一函数对象(universal function)
能够对数组进行元素级计算以及直接对数组执行数学运算的特殊函数
NumPy数组的基本属性
- NumPy中,每一个线性的数组称为是一个轴
- NumPy数组的维数称为秩(rank)
一维数组的秩为1
二维数组的秩为2,可以看作为两个一维数组
c=[[1 2 3 4]
[5 6 7 8]]
# 数组c是一个二维数组,秩为2,可以看成是两个一维数组
NumPy库的核心对象ndarray
ndarray,也称为多维数组(n-dimensional array),与列表和元组不同,ndarray中所有数据类型须相同
特点:
- 可以高效存储大量的数值元素
- 提高数组运算的速度
- 与各种扩展库进行数据交换
NumPy创建数组:
- 将列表或元组等Python数据类型转为数组;
array([x,y,x],dtype = int) #从列表和元组创建数组
(最常用的一种方法)
- 将列表转换为数组,数组中所有数据类型须相同
import numpy as np
# 创建简单的列表a,b
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
# 将列表a转换为一维数组并输出
print(np.array(a)) # 输出 [1 2 3 4]
#等长的多个列表可以转为一个多维数组
c = [a,b]
print(np.array(c)) # 输出 [[1 2 3 4] [5 6 7 8]]
- 在允许的情况下,会进行数据类型的转换
import numpy as np
a = [1, 2, 3, 'hello']
b = [5, 6, 7, 8]
print(np.array(a)) # 输出 ['1' '2' '3' 'hello']
c = [a,b]
print(np.array(c)) # 输出 [[ '1' '2' '3' 'hello'] [ '5' '6' '7' '8']]
- 数组变换
# array().reshape(m,n)
# 数组重建为m行n列的二维数组
import numpy as np
s = np.array(range(12))
print(s) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
print(s.reshape(3,4))
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
- 利用arange, ones, zeros等内置方法创建数组
- arange([x,]y[,i])
创建从x到y,步长为i的数组。缺省从0开始,缺省步长为1
import numpy as np
print(np.arange(1,12,2)) # 从1 到12,步长为2
# [ 1 3 5 7 9 11]
print(np.arange(12)) # 从0到12,步长为1
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
- numpy.linspace(start, stop, num)
从start到stop创建元素数量为num的等间隔数列(一维等差数组)
num缺省值为50
import numpy as np
print(np.linspace(1, 10, 10)) # 10个元素,9个间隔
# [ 1. 2. 3. 4. 5. 6. 7. 8. 9.10.]
- ones(shape, dtype=none)
创建全1数组
shape要以元组格式传入,表示行与列的数量
import numpy as np
#创建全1数组
print(np.ones((2,3)))
# [[1. 1. 1.]
# [1. 1. 1.]]
- zeros(shape, dtype=float)
创建全0数组
shape要以元组格式传入,表示行与列的数量。
import numpy as np
#创建全0数组
print(np.zeros((2,3)))
# [[0. 0. 0.]
# [0. 0. 0.]]
- 利用random等函数创建数组
- random.rand(m,n)
创建m行n列的随机数组
import numpy as np
#创建随机数组
print(np.random.rand(2,3))
# [[0.92214213 0.12781211 0.80536043]
# [0.29193973 0.24154696 0.48081903]]
数组索引和切片
- 数组支持索引和切片
- 操作与列表的操作类似
- 从一维拓展到多维
import numpy as np
arr = np.arange(36)
print(arr)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35]
# reshape(6,6)将创建的数组转成6行6列
arr = arr.reshape(6,6)
print(arr) # 返回数组所有元素
[[0 1 2 3 4 5]
[6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]
[30 31 32 33 34 35]]
- 数组切片的具体操作
Numpy读取文件中的数据
genfromtxt()函数提供了从文本文件中获取数据的方法,并提供缺失值处理等更复杂的操作。该函数可以跳过开头指定的行和注释行,根据指定的字符对每一行进行切分
numpy.genfromtxt(fname, dtype=<class 'float'>, delimiter=None, skip_header=0, skip_footer=0, filling_values = 0, encoding='utf-8')
# fname:文件名称
# dtype:生成数组的数据类型,默认为float
# delimiter:值为字符串、整数或序列。delimiter参数用于定义如何拆分数据行
# skip_header: 值为整数。参数的值对应于在执行任何其他操作之前在文件开头跳过的行数,缺省值为 skip_header=0,表示不略过任何行
# skip_footer:跳过文件的最后n行
# filling_values = 0:可以在输出时遇到缺失数据用数字“0”填充
import numpy as np
# str数据以字符串形式输出,delimiter指明分隔符为逗号,encoding指明编码类型
data = np.genfromtxt('scoretest.txt', dtype=str, delimiter=',’, encoding='utf-8’)
print(data)
loadtxt()主要参数的含义和用法与genfromtxt()函数的参数类似,这里不做过多说明。
import numpy as np
# str数据以字符串形式输出,delimiter指明分隔符为逗号,encoding指明编码类型
data = np.loadtxt('scoretest.txt', str, delimiter=',’, encoding='utf-8’)
print(data)
numpy也提供了savetxt()方法用于保存数组到文本文件,其语法和参数如下,其中大数据分参数的意义与genfromtxt()函数相似,此处不再赘述。
numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
参数中encoding 的值为“None”或字符串,用于指定编码输出文件的编码类型,当输出为字节流时此参数不可用。