NumPy(Numerical Python)是Python数据分析必不可少的第三方库,它一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。而且本身是由C语言开发,是个很基础的扩展,NumPy被作为Python其它科学计算包的基础包,因此理解np的数据类型对python数据分析十分重要。
NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。NumPy中的ndarray多维数组,具有矢量运算能力,快速、节省空间;其矩阵运算,无需循环,可完成类似Matlab中的矢量运算;而且它可以用于读写磁盘数据以及用于操作内存映射文件。
1. Numpy_介绍及属性
-
概述
1. Numerical Python是Python数据分析必不可少的第三方库 2. NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型. 使其具备了构造复杂数据类型的能力。 3. 本身是由C语言开发,是个很基础的扩展,NumPy被Python其它科学计算包作为基础包, 因此理解np的数据类型对python数据分析十分重要。 4. NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵, 比Python自身的嵌套列表结构要高效的多.
-
功能
1. 高性能科学计算和数据分析的基础包 2. ndarray,多维数组,具有矢量运算能力,快速、节省空间 3. 矩阵运算,无需循环,可完成类似Matlab中的矢量运算 4. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
-
属性
NumPy的数组类被称作ndarray,通常被称作数组。 ndarray对象属性有: ndarray.ndim # 数组轴的个数, 几维数组, 轴就是几 ndarray.shape # 数组的维度, 例如一个n排m列的矩阵,它的shape属性将是(2,3) ndarray.size # 数组中元素的总个数 ndarray.dtype # 数组中元素的类型 ndarray.itemsize # 数组每个元素的字节大小 示例代码: import numpy as np # arange(15): 生成0 ~ 15, 包左不包右之间的随机数. # reshape(3, 5): 把数据转成二维数组形式, 共有3个元素(一维数组), 每个一维数组的元素个数为: 5 a = np.arange(15).reshape(3, 5) print(a) print('数组的维度: ', a.shape) print('数组的轴: ', a.ndim) print('数组的长度为: ', a.size) print('数组的每个元素的数据类型为: ', a.dtype) print('数组每个元素的长度为: ', a.itemsize) # 4 print(type(a)) # <class 'numpy.ndarray'>
2.Numpy_创建一维数组
- 注意
- NumPy数组是一个多维的数组对象(矩阵),称为ndarray.
- ndarray的下标从0开始.
- 具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。
2.1 创建ndarray数组(一维数组)
-
方式1: array()函数
# 方式1: np.array()函数, 把传入的内容, 转成ndarray对象 a = np.array([1, 2, 3]) print(a) print(type(a)) # <class 'numpy.ndarray'>
-
方式2: zeros(), ones()函数
# zeros(): 创建全是0的数组. # ones(): 创建全是1的数组 b = zeros((2, 3)) print(b) # <class 'numpy.ndarray'> [[0. 0. 0.] [0. 0. 0.]] print(type(b)) # <class 'numpy.ndarray'> [[1. 1. 1.] [1. 1. 1.]] c = ones((2, 3)) print(c) print(type(c))
-
方式3: arange()函数
# 起始值为10, 结束值为20, 步长为3, 指定数据类型为: d = np.arange(10, 20, 2, dtype=int)int32 print(d) print(type(d)) print(d.dtype)
2.2 创建随机数矩阵
# 如下涉及到范围了, 都是包左不包右.
arr1 = np.random.rand(3, 4) # 3行4列, 0.0 ~ 1.0之间的小数
print(arr1)
print(type(arr1))
arr2 = np.random.randint(1, 5, size=(3, 4)) # 3行4列, 1 ~ 5之间的整数
print(arr2)
print(type(arr2))
arr3 = np.random.uniform(1, 5, size=(3, 4)) # 3行4列, 在均匀分布区间1~5中生成随机数
print(arr3)
print(type(arr3))
2.3 创建二维数组
-
方式: matrix()函数, 创建二维数组
m1 = np.mat('1 2; 3 4') print(m1) print(type(m1)) # <class 'numpy.matrix'> martix表示二维数组, 它是ndarray的子类. m2 = np.matrix('1,2;3,4') print(m2) print(type(m2)) m3 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m3) print(type(m3))
2.4 创建等比数组
# 参1: 开始点, 参2: 结束点, 参3: 元素个数. 其中参1和参2都是10的幂
a = np.logspace(1, 3, 5) # 即: 10 ~ 1000之间的等比数列, 取5个数字
print(a)
print(type(a))
# base表示基数改为3, 即, 这里是: 3 ~ 9之间, 等比数列, 取5个数
# endpoint属性, True(包括最后的数字, 即: 9), False(不包括最后的数字)
b = np.logspace(1, 2, 5, base=3, endpoint=True)
print(b)
print(type(b))
2.5 创建等差数列
# 1 ~ 5之间的等差数列, endpoint=False, 不包括右边的值(5), 即: 包左不包右.
c = np.linspace(1, 5, 3, endpoint=False)
print(c)
print(type(c))
3. Numpy的数据类型转换
-
dtype属性: 指定数组的数据类型,类型名+位数,如float64, int32
-
astype()函数: 转换数组的数据类型
arr_float = np.array([1.1, 2.2, 3.3], dtype=np.float32) print(arr_float) print(arr_float.dtype) # 元素类型为: float32 # 把元素转成int类型 arr_int = arr_float.astype(np.int32) print(arr_int) print(arr_int.dtype)
4.Numpy内置函数
-
基本函数
# 函数介绍如下: np.ceil(): 向上最接近的整数,参数是 number 或 array np.floor(): 向下最接近的整数,参数是 number 或 array np.rint(): 四舍五入,参数是 number 或 array np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array np.multiply(): 元素相乘,参数是 number 或 array np.divide(): 元素相除,参数是 number 或 array np.abs():元素的绝对值,参数是 number 或 array np.where(condition, x, y): 三元运算符,x if condition else y # 示例代码如下 arr = np.array([1.1, -2.5, 3.6]) print(np.ceil(arr)) print(np.floor(arr)) print(np.rint(arr)) print(np.isnan(arr)) print(np.abs(arr)) print(np.multiply(arr, arr)) print(np.divide(arr, arr)) print(np.where(arr > 0, 1, 0))
-
统计函数
# 函数介绍如下: np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array 多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。 # 示例代码如下 # 把1 ~ 10的数字, 存入到2行5列的 二维数组中. arr = np.arange(1, 11).reshape(2, 5) print(arr) print(np.cumsum(arr)) # [ 1 3 6 10 15] print(np.sum(arr)) # 15 print(np.sum(arr, axis=0)) # 0表示列 print(np.sum(arr, axis=1)) # 1表示行
-
比较函数
arr = np.array([-1, 2, 3]) print(arr) print(np.any(arr > 0)) # 任意1个大于零, True print(np.all(arr > 0)) # 所有的值都要大于零, False
-
去重函数
arr = np.array([[1, 2, 3], [2, 3, 4]]) print(arr) print(np.unique(arr))
-
排序函数
arr = np.array([1, 3, 2, 5]) print(arr) # 方式1: 排序后返回的是新的数组 new_arr = np.sort(arr) print(arr) # [1 3 2 5] print(new_arr) # [1 2 3 5] # 方式2: ndarray直接调用sort, 在原数据上直接修改. arr.sort() print(arr) # [1 2 3 5]
5.Numpy的运算
-
基本运算
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = b - a print(c) # [3 3 3] print(type(c)) # <class 'numpy.ndarray'>
-
矩阵运算
# 按列相乘,元素运算或矩阵x乘运算 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[1, 2, 3], [4, 5, 6]]) print(a) print(b) a * b # 默认: 按列相乘. np.multiply(a, b) # 按列相乘, 效果同上. # 普通矩阵运算, 数组1的行数 是 数组2的列数,也称为矩阵·乘运算 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[1, 2], [3, 4], [5, 6]]) print(a) print(b) print(a.dot(b)) # [[22 28] [49 64]] print(np.dot(a, b)) # [[22 28] [49 64]]