Numpy简易入门
目录
1 认识NumPy数组对象
Numpy是一个用python实现的科学计算的扩展程序库,包括:
- 1、一个强大的N维数组对象Array;
- 2、比较成熟的(广播)函数库;
- 3、用于整合C/C++和Fortran代码的工具包;
- 4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。
import numpy as np
data = np.arrange(16).reshape(4,4)
data
type(data) #数组类型
data.ndim #数组维度
data.shape
data.size
data.dtype
#输出如下:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
numpy.ndarray
2
(4, 4)
16
dtype('int32')
2 创建NumPy数组
创建基本数组代码如下:
import numpy as np
data1 = np.array([1,2,3])
data2 = np.array([[1, 2, 3], [4, 5, 6]])
np.zeros((3, 4))#创建一个全0数组
np.ones((3, 4))#创建全一数组
np.empty((5, 2))# 创建全空数组,其实每个值都是接近于零的数
动态创建数组,并对数组元素指定元素类型
np.arange(1,20,5)
np.array([1,2,3,4],float)
np.ones((2,3),dtype='float64')
#分别输出如下:
array([ 1, 6, 11, 16])
array([1., 2., 3., 4.])
array([[1., 1., 1.],
[1., 1., 1.]])
上面是创建时指定类型,接下来转换类型
3 ndarry对象的数据类型转换
查看类型:
data_one = np.array([[1, 2, 3], [4, 5, 6]])
data_one.dtype.name #'int32'
date_one.dtype #dtype('int32')
类型转换:比如转换成float64。运用astype()方法进行转换,参数为np.数据类型
float1data = data_one.astype(np.float64)
float1data.dtype #dtype('float64')
其他实例:
float_data = np.array([1.2, 2.3, 3.5])
nt_data = float_data.astype(np.int64)
int_data #array([1, 2, 3], dtype=int64)
4 数组运算
4.1向量化运算
import numpy as np
data1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = np.array([[1, 2, 3], [4, 5, 6]])
data1 + data2 # 数组相加
'''
array([[ 2, 4, 6],
[ 8, 10, 12]])
'''
data1 * data2 #对位相乘
'''
array([[ 1, 4, 9],
[16, 25, 36]])
'''
data1 - data2 # 数组相减
'''
array([[0, 0, 0],
[0, 0, 0]])
'''
data1 / data2 # 数组相除
'''
array([[1., 1., 1.],
[1., 1., 1.]])
'''
4.2 数组广播
numpy数组间的基础运算是一对一,也就是a.shape==b.shape
,但是当两者不一样的时候,就会自动触发广播机制,如下例子:
import numpy as np
arr1 = np.array([[0], [1], [2], [3]])
arr1.shape #(4, 1)
arr2 = np.array([1, 2, 3])
arr2.shape #(3,)
arr1 + arr2
'''
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
'''
原理如下图
4.3 数组与标量间的运算
import numpy as np
data1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = 10
data1 + data2 # 数组相加
'''
array([[11, 12, 13],
[14, 15, 16]])
'''
data1 * data2 # 数组相乘
'''
array([[10, 20, 30],
[40, 50, 60]])
'''
data1 - data2 # 数组相减
'''
array([[-9, -8, -7],
[-6, -5, -4]])
'''
data1 / data2 # 数组相除
'''
array([[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6]])
'''
5 ndarray的索引和切片
5.1 整数索引和切片的基本使用
先说切片,切片类似python中切片。原理图
发现规律如下:
- 切片中参数以逗号隔开,冒号:周围的2个参数表示范围(左闭右开区间)。
- numpy数组下标依旧是0开始的。
- 如果冒号:周围参数维度已经用完,新的冒号代表的是步伐大小(和python类似)
- 索引可以用整数和数组当索引(但要注意的是数组作为索引要清楚维度)
- 布尔型也可以作为索引,代码如下:
import numpy as np
# 存储学生姓名的数组
student_name = np.array(['Tom', 'Lily', 'Jack', 'Rose'])
# 存储学生成绩的数组
student_score = np.array([[79, 88, 80], [89, 90, 92], [83, 78, 85], [78, 76, 80]])
# 对student_name和字符串“Jack”通过运算符产生一个布尔型数组
student_name == 'Jack' #array([False, False, True, False])
# 将布尔数组作为索引应用于存储成绩的数组student_score,
# 返回的数据是True值对应的行
student_score[student_name=='Jack'] #array([[83, 78, 85]])
student_score[student_name=='Jack', :1] #array([[83]])
6 数组的转置和轴对称
import numpy as np
arr = np.arange(12).reshape(3, 4)
arr.T # 使用T属性对数组进行转置
'''
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
'''
arr = np.arange(16).reshape((2, 2, 4))
arr
'''
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
'''
arr.transpose(1, 2, 0)
# 使用transpose()方法对数组进行转置 注意参数是指定维度转换,对应维度数值为2 4 2
'''
array([[[ 0, 8],
[ 1, 9],
[ 2, 10],
[ 3, 11]],
[[ 4, 12],
[ 5, 13],
[ 6, 14],
[ 7, 15]]])
'''
arr.swapaxes(1, 0) # 使用swapaxes方法对数组进行转置
#轴对称,swapaxes接受一对轴编号,或者叫一对维度编号,里面只能是两个参数,且不分顺序。
'''
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
'''
7 NumPy通用函数
arr = np.array([4, 9, 16])
np.sqrt(arr)#开方
np.abs(arr)#求绝对值
np.square(arr)#求平方
x = np.array([12, 9, 13, 15])
y = np.array([11, 10, 4, 8])
np.multiply(x, y) # 计算两个数组的乘积 array([132, 90, 52, 120])
np.maximum(x, y) # 两个数组元素级最大值的比较
#array([12, 10, 13, 15])
np.greater(x, y) # 执行元素级的比较操作 array([ True, False, True, True])
8 利用NumPy数组进行数据处理(后序更新)
8.1 将条件逻辑转为数组运算
即是把逻辑运算转换成数组运算
8.2 数组统计运算
8.3 数组排序
8.4 检索数组元素
8.5 唯一化及其他集合逻辑
9 线性代数模块