当前位置:   article > 正文

35个NumPy数据科学核心方法,从入门到精通_numpy教程

numpy教程

大家好,NumPy是Python数据科学生态中的核心编程库。对于Python开发者,精通NumPy是探索数据奥秘的关键。本文将介绍35个NumPy核心方法,帮助大家快速掌握这一强大工具。

使用NumPy库之前,首先需要进行导入,在Python中,通常将numpy简称为np。同时,考虑到数据处理的需要,pandas库也要一并导入。

  1. import numpy as np
  2. import pandas as pd

以下是创建NumPy数组的最常见方法:

1.从Python列表

要将Python列表转换为NumPy数组,请使用np.array()方法:

  1. a = [123]
  2. np.array(a)

可以使用Python中可用的type方法来验证创建的对象的数据类型:

  1. a = [123]
  2. type(np.array(a))

在上面的演示中,创建了一个一维数组。

图片

然而,也可以使用方法np.array(),使用列表创建多维 NumPy 数组:

  1. a = [[1,2,3], [4,5,6]]
  2. np.array(a)

图片

要创建具有特定数据类型的NumPy数组,请通过dtype参数:

  1. a = [[1,2,3], [4,5,6]]
  2. np.array(a, dtype = np.float32)

2.创建填充零的NumPy数组

创建一个填充零的NumPy数组是很常见的,可以通过使用NumPy中的np.zeros()方法实现,如下所示:

np.zeros(5)

对于多维NumPy数组:

np.zeros((23))

3.创建填充1的NumPy数组

如果想创建一个填充1的数组,用np.ones()方法:

np.ones((23))

4.创建单位NumPy数组

在单位矩阵中,对角线填充有“1”,除了对角线之外的所有条目都是“0”,如下所示:

图片

使用np.eye()方法创建单位矩阵:

np.eye(3)

5.创建具有特定步骤的等间距NumPy数组

图片

要在给定区间内生成等间距的值,请使用np.arange()方法:

  • start=0开始到stop=10为止,每隔step=1生成一个值:

np.arange(10)
  • start=5开始到stop=11为止,每隔step=1生成一个值:

np.arange(511)
  • start=5开始到step=11为止,每隔step=2生成一个值:

np.arange(5112)

stop值不包括在最终数组中,默认情况下,step=1

6.创建具有特定数组大小的等间距NumPy数组

这类似于上面讨论的np.arange(),但使用np.linspace(),您可以在区间内生成num个数字,这些数字是均匀间隔的。

np.linspace(start = 10, stop = 20, num = 5)

7.生成随机整数数组

使用np.random.randint()方法:

np.random.randint(low = 5, high = 16, size = 5)

8.生成随机浮点样本

np.random.random()方法:

np.random.random(size = 10)

9.从Pandas Series生成NumPy数组

如果想将Pandas系列转换为NumPy数组,可以使用np.array()np.asarray()方法:

  1. s = pd.Series([1,2,3,4], name = "col")
  2. np.array(s)
  1. s = pd.Series([1,2,3,4], name = "col")
  2. np.asarray(s)

接下来,介绍一些最常用的NumPy数组操作方法。

10.NumPy数组的形状

可以使用NumPy数组的ndarray.shape属性或np.shape()方法确定NumPy数组的形状,如下所示:

  1. a = np.ones((23))
  2. print("Shape of the array - Method 1:", np.shape(a))
  3. print("Shape of the array - Method 2:", a.shape)

11.重塑NumPy数组

重塑是指在不改变其数据的情况下给NumPy数组一个新的形状。

图片

可以使用np.reshape()方法改变形状:

  1. a = np.arange(10)
  2. a.reshape((25))

12.转置NumPy数组

图片

如果想转置NumPy数组,可以使用np.transpose()方法或ndarray.T,如下所示:

  1. a = np.arange(12).reshape((62))
  2. a.transpose()
  1. a = np.arange(12).reshape((62))
  2. a.T

13.连接多个NumPy数组以形成一个NumPy数组

使用np.concatenate()方法连接一系列数组并获得一个新的NumPy数组:

图片

  1. ## 按行连接
  2. a = np.array([[12], [34]])
  3. b = np.array([[56]])
  4. np.concatenate((a, b), axis=0)

图片

  1. ## 按列连接
  2. a = np.array([[12], [34]])
  3. b = np.array([[56]])
  4. np.concatenate((a, b.T), axis=1)
  1. ## 连接以生成一维NumPy数组
  2. a = np.array([[12], [34]])
  3. b = np.array([[56]])
  4. np.concatenate((a, b), axis=None)

axis=0np.vstack()相同,axis=1np.hstack()相同。

14.展平NumPy数组

图片

如果想将整个NumPy数组压缩成单一维度,可以使用ndarray.flatten()方法,如下所示:

  1. a = np.array([[1,2], [3,4]])
  2. a.flatten()

15.NumPy数组中的唯一元素

要确定NumPy数组中的唯一元素,用np.unique()方法,如下所示:

  1. a = np.array([[12], [23]])
  2. np.unique(a)
  1. ## 返回唯一行
  2. a = np.array([[123], [123], [234]])
  3. np.unique(a, axis=0)
  1. ## 返回唯一列
  2. a = np.array([[113], [113], [114]])
  3. np.unique(a, axis=1)

16.挤压NumPy数组

如果想从NumPy数组中移除长度为一的轴,请用np.squeeze()方法。这在下面进行了说明:

  1. x = np.array([[[0], [1], [2]]])
  2. >>> x.shape
  3. (131)
  4. np.squeeze(x).shape

17.将NumPy数组转换为Python列表

要从NumPy数组获取Python列表,请用ndarry.tolist()方法,如下所示:

  1. a = np.array([[113], [113], [114]])
  2. a.tolist()

NumPy数组支持丰富的元素级数学运算,这些运算可以对数组中的每个元素单独进行。以下是一些在NumPy数组上应用最为常见的数学函数:

18.三角函数

  1. a = np.array([1,2,3])
  2. print("Trigonometric Sine   :", np.sin(a))
  3. print("Trigonometric Cosine :", np.cos(a))
  4. print("Trigonometric Tangent:", np.tan(a))

19.舍入函数

  • 使用np.floor()方法返回元素级的向下舍入。

  • 使用np.ceil()方法返回元素级的向上舍入。

  • 使用np.rint()方法四舍五入到最近的整数。

  1. >>> a = np.linspace(125)
  2. array([1.  , 1.251.5 , 1.752.  ])
  3. >>> np.floor(a)
  4. array([1.1.1.1.2.])
  5. >>> np.ceil(a)
  6. array([1.2.2.2.2.])
  7. >>> np.rint(a)
  8. array([1.1.2.2.2.])
  • 使用np.round_()方法四舍五入到给定的小数位数:

  1. = np.linspace(127)
  2. np.round_(a, 2) # 保留两位小数

20.指数和对数

  • 使用np.exp()方法计算元素级的指数。

  • 使用np.log()方法计算元素级的自然对数。

  1. >>> a = np.arange(16)
  2. array([12345])
  3. >>> np.exp(a).round(2)
  4. array([  2.72,   7.39,  20.09,  54.6 , 148.41])
  5. >>> np.log(a).round(2)
  6. array([0.  , 0.691.1 , 1.391.61])

21.求和

使用np.sum()方法计算数组元素的总和:

  1. a = np.array([[12], [34]])
  2. >>> np.sum(a)
  3. 10
  4. >>> np.sum(a, axis = 0)
  5. array([46])
  6. >>> np.sum(a, axis = 1)
  7. array([37])

22.乘积

使用np.prod()方法计算数组元素的乘积:

  1. a = np.array([[12], [34]])
  2. >>> np.prod(a)
  3. 24
  4. >>> np.prod(a, axis = 0)
  5. array([38])
  6. >>> np.sum(a, axis = 1)
  7. array([212])

23.平方根

使用np.sqrt()方法计算数组元素的平方根:

  1. a = np.array([[12], [34]])
  2. np.sqrt(a)

矩阵和向量运算:

24.点积

想计算两个NumPy数组的点积,使用np.dot()方法:

  1. a = np.array([[12], [34]])
  2. b = np.array([[11], [11]])
  3. np.dot(a, b)

25.矩阵乘积

要计算两个NumPy数组的矩阵乘积,使用np.matmul()或Python中的@运算符:

  1. a = np.array([[12], [34]])
  2. b = np.array([[11], [11]])
  3. >>> np.matmul(a, b)
  4. array([[33],
  5.        [77]])
  6. >>> a@b
  7. array([[33],
  8.        [77]])

26.向量范数

向量范数是一组用于测量向量长度的函数。

使用np.linalg.norm()方法找到矩阵或向量范数:

  1. a = np.arange(-45)
  2. >>> np.linalg.norm(a) ## L2范数
  3. 7.745966692414834
  4. >>> np.linalg.norm(a, 1## L1范数
  5. 20.0

排序方法:

27.对NumPy数组进行排序

要就地排序数组,使用ndarray.sort()方法。

  1. a = np.array([[1,4],[3,1]])
  2. >>> np.sort(a) ## 按行排序
  3. array([[14],
  4.        [13]])
  5. >>> np.sort(a, axis=None## 对展平后的数组进行排序
  6. array([1134])
  7. >>> np.sort(a, axis=0## 按列排序
  8. array([[11],
  9.        [34]])

28.排序NumPy数组中的索引顺序

要返回将数组排序的索引顺序,请使用np.argsort()方法:

  1. x = np.array([312])
  2. np.argsort(x)

搜索方法:

29.对应最大值的索引

要返回沿轴的最大值的索引,请使用np.argmax()方法,如下所示:

  1. >>> a = np.random.randint(12010).reshape(2,5)
  2. array([[151310,  118],
  3.        [14191917,  8]])
  4. >>> np.argmax(a) ## 在展平后的数组中寻找最大值的索引
  5. 6
  6. >>> np.argmax(a, axis=0## 按列寻找每列最大值的索引
  7. array([01110])
  8. >>> np.argmax(a, axis=1## 按行寻找每行最大值的索引
  9. array([41])

要在非展平数组中找到索引,可以这样做:

  1. ind = np.unravel_index(np.argmax(a), a.shape)
  2. ind

30.对应最小值的索引

类似地,如果想返回沿轴的最小值的索引,请使用np.argmin()方法,如下所示:

  1. >>> a = np.random.randint(12010).reshape(2,5)
  2. array([[151310,  118],
  3.        [14191917,  8]])
  4. >>> np.argmin(a) ## 在展平后的数组中寻找最小值的索引
  5. 3
  6. >>> np.argmin(a, axis=0## 按列寻找每列最小值的索引
  7. array([10001])
  8. >>> np.argmin(a, axis=1## 按行寻找每行最小值的索引
  9. array([34])

31.基于条件的搜索

想根据条件在两个数组之间进行选择,使用np.where()方法,如下所示:

  1. >>> a = np.random.randint(-101010)
  2. array([ 2, -3,  6, -3, -8,  4, -6, -2,  6, -4])
  3. >>> np.where(a < 00, a)
  4. array([2060040060])
  5. """
  6. if element < 0:
  7.     return 0
  8. else:
  9.     return element
  10. """

32.非零元素的索引

要确定NumPy数组中非零元素的索引,请使用np.nonzero()方法:

  1. a = np.array([[300], [040], [560]])
  2. np.nonzero(a)

接下来看看计算NumPy数组上的标准统计方法。

33.平均值

要找到NumPy数组中值的平均值沿轴,使用np.mean()方法,如下所示:

  1. a = np.array([[12], [34]])
  2. >>> np.mean(a)
  3. 2.5
  4. >>> np.mean(a, axis = 1## 沿行轴计算平均值
  5. array([1.53.5])
  6. >>> np.mean(a, axis = 0## 沿列轴计算平均值
  7. array([2.3.])

34.中位数

要计算NumPy数组的中位数,使用np.median()方法。

  1. a = np.array([[12], [34]])
  2. >>> np.median(a)
  3. 2.5
  4. >>> np.median(a, axis = 1## 沿行轴求中位数
  5. array([1.53.5])
  6. >>> np.median(a, axis = 0## 沿列轴求中位数
  7. array([2.3.])

35.标准差

要计算NumPy数组的标准差沿指定数组,使用np.std()方法。

  1. a = np.array([[12], [34]])
  2. >>> np.std(a)
  3. 1.118033988749895
  4. >>> np.std(a, axis = 1## 沿行轴计算标准差
  5. array([0.50.5])
  6. >>> np.std(a, axis = 0## 沿列轴计算标准差
  7. array([1.1.])

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/969050
推荐阅读
相关标签
  

闽ICP备14008679号