Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。它是我们课程所介绍的其他高级工具的构建基础。
其部分功能如下:
- ndarray, 一个具有复杂广播能力的快速且节省空间的多维数组。
- 对于整组数据进行快速的运算,无需编写循环。
- 用于读写磁盘数据的工具以及用于操作内容映射文件的工具。
- 用于集成由C, C++等语言编写的代码的工具。
一.创建数组
numpy是一个N维数组,类型是numpy.ndarray,ndarray中所有的元素类型必须一样,每个素组中都有一个shape(各维度大小的元组)和一个dtype(数组数据类型的对象)
1.array函数创建0维数组,1维数组,2维数组,3维数组
# 导入numpy包
import numpy as np
# 创建O维数组
ndarray0 = np.array(1)
# 创建1维数组
ndarray1 = np.array([1,2,3,4,5])
# 创建2维数组
ndarray2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])
# 创建3维数组
ndarray3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
# 输出结果
print("以下数组类型")
print("ndarray0:{}".format(type(ndarray0)))
print("ndarray1:{}".format(type(ndarray1)))
print("ndarray2:{}".format(type(ndarray2)))
print("ndarray3:{}".format(type(ndarray3)))
print("*********************************")
print("以下数组元素类型")
print("ndarray0:{}".format(ndarray0.dtype))
print("ndarray1:{}".format(ndarray1.dtype))
print("ndarray2:{}".format(ndarray2.dtype))
print("ndarray3:{}".format(ndarray3.dtype))
print("*********************************")
print("以下数组shape")
print("ndarray0:{}".format(ndarray0.shape))
print("ndarray1:{}".format(ndarray1.shape))
print("ndarray2:{}".format(ndarray2.shape))
print("ndarray3:{}".format(ndarray3.shape))
输出结果
2.zeros和zeros_like创建数组
zeros创建元素均为0的数组,zeros_like根据出入的数组的shape来创建所有元素均为0的数组
ndarray4 = np.zeros((2,3))
ndarray5 = np.zeros((2))
ndarray6 = np.zeros_like([[1,2,3],[2.,4,5]])
3.ones和ones_like创建数组
ones创建所有元素为0的数组,ones_like根据传入的数组的shape来创建所有元素均为1的数组
ndarray4 = np.ones((2,3))
ndarray5 = np.ones((2))
ndarray6 = np.ones_like([[1,2,3],[2.,4,5]])
4. empty和empty_like创建数组
创建未初始化的数组
ndarray4 = np.empty((2,3))
ndarray5 = np.empty(2)
ndarray6 = np.empty_like([[1,2,3],[2,4,5]])
5.arange创建数组
# 产生0-9共10个元素
ndarray13 = np.arange(10)
# 产生从10-19共10个元素
ndarray14 = np.arange(10, 20)
# 产生10 12 14 16 18, 2为step
ndarray15 = np.arange(10, 20, 2)
# ndarray15的形状
print('ndarray14的形状:', ndarray14.shape)
# 将其形状改变为(2, 5)
ndarray15 = ndarray14.reshape((2, 5))
6.eys创建对角矩阵数组
创建一个N*N的矩阵,对角线为1,其余为0.
二 数据类型
1.指的是数组元素的类型
int默认int32 float默认float62
2.更改元素类型进行数组类型的转换
# 开始数租
ndarray0 = np.array([1,2,3,4])
print("初始元素类型:{}".format(ndarray0.dtype))
# 更改数组元素类型
ndarray1 = ndarray0.astype(np.int64)
print("更改后数组元素类型:{}".format(ndarray1.dtype))
数组运算
# 数组a
a = np.array([[5,6],[7,8],[9,10]])
# 数组b
b = np.array([[1,2],[3,4],[5,6]])
# 数组与数组之间的运算
c1 = a + b
c2 = a - b
c3 = a * b
c4 = a / b
# 数组与数字之间的运算
d1 = a + 2
d2 = a - 2
d3 = a * 2
d4 = a / 2
# 一维数组与多维数组之间的运算
e1 = a + np.array([2])
e2 = a - np.array([2])
e3 = a * np.array([2])
e4 = a / np.array([2])
数组索引和切片
基本索引和切片
花式索引
import numpy as np
ndarray1 = np.empty((8, 4))
for i in range(8):
ndarray1[i] = np.arange(i, i + 4)
# 选取特定的子集,参数为列表 # 选定索引为0 1 6 7 这四行
ret1 = ndarray1[[0, 1, 6, 7]]
# 使用负数索引会从末尾开始选取行 # 选定索引为-1, 0, -2 这三行
ret2 = ndarray1[[-1, 0, -2]]
# 一次传入多个数组 选取前面列表的行 然后继续按照后面列表的索引进行分别选取
ret3 = ndarray1[[1, 3, 5], [1, 2, 3]]
# 先选取前面的数组 然后继续后面的选取
ret4 = ndarray1[[1, 3, 5]][[1, 2]]
# 获取选区数据
ret5 = ndarray1[[1, 3, 5]][:, [1, 2, 3]]
ret6 = ndarray1[np.ix_([1, 2, 4], [1, 2, 3])]
数组函数
通用元素级数组函数
# 定义一个数组 -100到100任意int32类型,数组维度大小(2,3,4)
ndarray0 = np.random.uniform(-100,100,size=(2,3,4))
# 一元函数
# 计算数组的绝对值 abs 各个元素的绝对值
np.abs(ndarray0)
# 计算各个元素的平方 square
np.square(ndarray0)
# 计算各个元素的平方个 sqrt
# np.sqrt(ndarray0)
# 计算各元素的正负号 1:正数 -1 :负数 0:0
np.sign(ndarray0)
# 计算各个元素的celling值,即大于该值的最小正数
np.ceil(ndarray0)
# 计算各元素的floor值,即小于等于该值的最大正数
np.floor(ndarray0)
# 对各个元素进行四舍五入,但是保留dtype
np.rint(ndarray0)
# 将各个元素进行正数和小数进行拆分,返回两个数组(一个正数数组,一个小数数组)
np.modf(ndarray0)
# 对各个元素是否是空值进行判断 False:不是空值 True:是空值
np.isnan(ndarray0)
#定义两个数组
ndarray1 = np.array([[3,2,3,4,5],[2,3,4,5,6]])
ndarray2 = np.array([[3,4,5,6,7],[4,5,6,7,8]])
# 二元函数
# 将两个数组的对应元素进行相加 add
np.add(ndarray1,ndarray2)
# 两数组中对应位置元素进行相减 subtract
np.subtract(ndarray1,ndarray2)
# 数组元素想乘,对应位置元素进行相乘 multiply
np.multiply(ndarray1,ndarray2)
# 对应元素进行相除 divide
np.divide(ndarray1,ndarray2)
# 对应元素进行相除 但是舍弃余数
np.floor_divide(ndarray2,ndarray1)
# 进行指数运算对应元素,前者有底数 后者后指数
np.power(ndarray1,ndarray2)
# 从两数组对应元素中取出相比较大的元素组成新的数组
np.maximum(ndarray1,ndarray2)
# 从两数组对应元素中取出相比较大的元素组成新的数组 相比maximum忽略nan值
np.fmax(ndarray1,ndarray2)
# 从两数组对应元素中取出相比较小的元素组成新的数组
np.minimum(ndarray1,ndarray2)
# 从两数组对应元素中取出相比较小的元素组成新的数组 相比maximum忽略nan值
np.fmin(ndarray1,ndarray2)
# 求模计算 计算对应元素相除得到的余数,组成新的数组
np.mod(ndarray2,ndarray1)
# 将第二个素组中的符号复制给第一个数组对应元素上,如果第二个是负数,则将负号复制到第一个数组对应元素上,值取第一个数组的元素
np.copysign(ndarray1,ndarray2)
# 运算比较 两者进行比较 greater 大于就True 否者False
np.greater(ndarray1,ndarray2)
# 运算比较 两者进行比较 greater 大于等于就True 否者False
np.greater_equal(ndarray1,ndarray2)
相关链接
- NumPy 官网 http://www.numpy.org/
- NumPy 源代码:https://github.com/numpy/numpy
- SciPy 官网:https://www.scipy.org/
- SciPy 源代码:https://github.com/scipy/scipy
- Matplotlib 官网:https://matplotlib.org/
- Matplotlib 源代码:https://github.com/matplotlib/matplotlib