16、Numpy科学计算库

1、Numpy简介

NumPy(Numerical Python)
NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。
本身是由C语言开发,是个很基础的扩展,NumPy被Python其它科学计算包作为基础包,因此理解np的数据类型对python数据分析十分重要。
Numpy重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多
1、高性能科学计算和数据分析的基础包
2、ndarray,多维数组,具有矢量运算能力,快速、节省空间
3、矩阵运算,无需循环,可完成类似Matlab中的矢量运算
4、用于读写磁盘数据的工具以及用于操作内存映射文件的工具

2、Numpy属性

Numpy的数组类被称作ndarray,通常被称作数组。
ndarray.ndimndarray.shapendarray.sizendarray.dtypendarray.itemsize

import numpy as np
a = np.arange(15).reshape(3,5)
# [[ 0  1  2  3  4] [ 5  6  7  8  9] [10 11 12 13 14]]
print("数组的维度:", a.shape) # (3, 5)
print("数组轴的个数:", a.ndim) # 2
print("数组元素类型:", a.dtype) # int64
print("数组中每个元素大小:", a.itemsize) # 8
print("数组元素的总个数:", a.size) # 15
print("类型查询:", type(a)) # <class 'numpy.ndarray'>
# 创建一个数组
b = np.array([6,7,8])
print("数组:", b) # [6 7 8]
print("数组类型:", type(b)) # <class 'numpy.ndarray'>

3、创建ndarray的函数

多维的数组对象(矩阵)ndarray,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型。

1.1、array()
import numpy as np
a = np.array([2,3,4])
print("数组a的元素类型:",a) #[2 3 4]
print("数组a的类型:",a.dtype) # int64
b = np.array([1.2,3.5,5.1])
print("数组b的元素类型:",b.dtype) # float64
1.2、zeros() /ones()/empty()

函数zeros创建一个全是0的数组,函数ones创建一个全1的数组,函数empty创建一个内容随机并且依赖于内存状态的数组。默认创建的数组类型(dtype)都是float64

np.zeros((3,4))
/*
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
*/
np.ones((2,3,4))
/*
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
*/
np.empty((2,3))
/*
array([[0., 0., 0.],
       [0., 0., 0.]])
*/
1.3、arrange()

arange() 类似 pythonrange() ,创建一个一维 ndarray数组。

np_arrange = np.arange(10,20, 5, dtype=int)#  >=10 && <20 && 跨度为5
print("", np_arrange) # [10 15]
print("元素类型:", np_arrange.dtype) # int64
print("类型:", type(np_arrange)) # <class 'numpy.ndarray'>
1.4、matrix()

matrix 是 ndarray 的子类,只能生成 2 维的矩阵

x1 = np.mat("1 2;3 4")
print(x1) # [[1 2] [3 4]]
x2 = np.matrix("1 2;3 4")
print(x2) # [[1 2] [3 4]]
x3 = np.matrix([[1,2,3,4],[5,6,7,8]])
print(x3) # [[1 2 3 4] [5 6 7 8]]
1.5、随机数组
# 指定维度(3行,4列)随机多维浮点类型数据(二维),rand区间(0.0~1.0)
arr = np.random.rand(3,4)
# 指定维度(3行,4列)随机多维整型数据(二维),randint区间 [-1~5)
arr = np.random.randint(-1,5, size = (3, 4))
# 指定维度(3行,4列)随机多维浮点型数据(二维),uniform区间 [-1~5)
arr = np.random.uniform(-1,5, size = (3, 4))
1.6、ndarray的数据类型

dtype参数,指定数组的数据类型
astype方法,转换数组的数据类型

# 初始化3行4列数组,数据类型为float64
zero_float_arr = np.zeros((3,4), dtype = np.float64)
# [[0. 0. 0. 0.]  [0. 0. 0. 0.] [0. 0. 0. 0.]]
# astype转换数据类型,将已有的数组的数据类型转换为int32
zero_int_arr = zero_float_arr.astype(np.int32)
# [[0 0 0 0] [0 0 0 0] [0 0 0 0]]
1.7、np.logspace等比/np.linspace等差数列

np.logspace等比数列
logspace中,开始点和结束点是10的幂

a = np.logspace(0,9,10) # 10的0次方到10的9次方步长为10的等差数列
# [1.e+00 1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09]
a = np.logspace(0,9,10, base=2)  # 2的0次方到2的9次方步长为10的等差数列 。
# [  1.   2.   4.   8.  16.  32.  64. 128. 256. 512.]

np.linspace等差数列

# 参数分别为 起始值,终止值,数列个数,是否包含终止值的等差数列
a = np.linspace(0,10,10, endpoint=False)
# [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

4、Numpy内置函数

4.1、基本函数
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 
4.2、统计函数
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则按行统计。 
4.3、比较函数

np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True

arr = np.random.randn(2,3) # (-1,1)之间的随机数
print(np.any(arr > 0)) # True
print(np.all(arr > 0)) # False
4.4、去重函数

np.unique():找到唯一值并返回排序结果,类似于Python的set集合

arr = np.array([[1,2,1], [2,3,4]])
print(np.unique(arr))
# [1 2 3 4]
4.5、排序函数
arr = np.array([2,3,6,4])
print(np.sort(arr)) # 返回新的数组
arr.sort()# 对原来数组进行修改

5、Numpy运算

5.1、基本运算

数组的运算是按照元素进行的

a = np.array([20,30,40,50])
b = np.arange(4)
c = a - b
5.2、矩阵乘积
矩阵相乘1

矩阵相乘2
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[1,2,3],[4,5,6]])
print(a * b) 
print(a.dot(b))
print(np.dot(a,b))
/*
[[ 1  4  9]
 [16 25 36]]
*/
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容