一、说明
NumPy(或Numeric Python)是每个数据科学和机器学习项目的核心。
整个数据驱动的生态系统在某种程度上依赖于NumPy及其核心功能。这使它成为 Python 有史以来最重要和改变游戏规则的库之一。
鉴于NumPy由于其无与伦比的潜力而在工业界和学术界具有广泛的适用性,因此对于python程序员来说,熟悉其方法和语法是极其必要的。
但是,如果您是新手并试图牢牢掌握 NumPy 库,那么如果您从 NumPy 的官方文档开始,一开始事情可能会显得非常令人生畏和不知所措。
我自己去过那里,这个博客旨在帮助您开始使用NumPy。换句话说,在这个博客中,我将回顾我使用NumPy的经验,并分享我几乎一直使用的45种特定方法。
您可以在此处参考本文的代码。
二、Numpy使用范例
2.1 导入库
当然,如果你想使用NumPy库,你应该导入它。
import numpy as np
import pandas as pd 
  这里广泛采用的约定是将别名设置为np 。我们还将在这里和那里使用pandas,所以让我们也导入它。
2.2 (1–10) NumPy 数组创建方法
以下是创建 NumPy 数组的一些最常见方法。
#1)来自python列表
要将 python 列表转换为 NumPy 数组,请使用以下方法:np.array()
a = [1, 2, 3]
np.array(a) 
    我们可以验证使用 Python 中可用的方法创建的对象的数据类型:type
a = [1, 2, 3]
type(np.array(a))
 
    在上面的演示中,我们创建了一个一维数组。
![]()
一维数组(图片来自作者)
但是,我们也可以使用列表列表创建一个多维 NumPy 数组:np.array()
a = [[1,2,3], [4,5,6]]
np.array(a) 
  
 
     若要创建特定数据类型的 NumPy 数组,请传递参数:dtype
a = [[1,2,3], [4,5,6]]
np.array(a, dtype = np.float32) 
    #2)创建一个零的NumPy数组
通常创建一个用零填充的 NumPy 数组。这可以使用 NumPy 中的方法,如下所示:np.zeros()
np.zeros(5) 
   >>
array([0., 0., 0., 0., 0.]) 
   对于多维 NumPy 数组:
np.zeros((2, 3)) 
   >>
array([[0., 0., 0.],
       [0., 0., 0.]]) 
  #3)创建一个数字数组
如果要创建一个填充 1 的数组,请改用该方法代替零:np.ones()
np.ones((2, 3)) 
    >>
array([[1., 1., 1.],
       [1., 1., 1.]]) 
   #4)创建一个身份数字数组
在单位矩阵中,对角线填充“1”,除对角线外的所有条目均为“0”,如下所示:

身份矩阵(图片来自作者)
使用该方法创建单位矩阵。np.eye()
np.eye(3) 
    >>
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]]) 
   #5)使用特定步骤创建一个等间距的NumPy数组

要在给定间隔内生成等间距值,请使用以下方法:np.arange()
- 使用 生成从 到 的值:
start=0stop=10step=1 
np.arange(10)
>>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
   - 使用 生成从 到 的值:
start=5stop=11step=1 
np.arange(5, 11)
>>array([ 5,  6,  7,  8,  9, 10]) 
   - 生成 with 的值。
start=5step=11step=2 
np.arange(5, 11, 2)
>>array([5, 7, 9]) 
    该值不包含在最终数组中,默认情况下,.stopstep=1
#6)创建一个具有特定数组大小的等间距NumPy数组
这与上面讨论的类似,但使用 ,您可以在一个间隔内生成数字,并且数字是均匀分布的。np.arange()np.linspace()num
np.linspace(start = 10, stop = 20, num = 5)
>>array([10. , 12.5, 15. , 17.5, 20. ]) 
  #7–8) 生成一个随机的 NumPy 数组
- 若要生成整数的随机数组,请使用以下方法:
np.random.randint() 
np.random.randint(low = 5, high = 16, size = 5)
>>array([12,  9,  8,  8, 13]) 
   - 但是,要生成随机浮点样本,请使用以下方法:
np.random.random() 
np.random.random(size = 10)
>> array([0.13011502, 0.13624477, 0.63199788, 0.62565385, 0.47521946,
       0.31121428, 0.11785969, 0.49575226, 0.77330761, 0.77047183]) 
    #9–10) 从pandas系列生成 NumPy 数组
如果要将熊猫系列转换为 NumPy 数组,可以使用 or 方法之一:np.array()np.asarray()
s = pd.Series([1,2,3,4], name = "col")
np.array(s)
>> array([1, 2, 3, 4]) 
    s = pd.Series([1,2,3,4], name = "col")
np.asarray(s)
>> array([1, 2, 3, 4]) 
     
   11–21) NumPy 数组操作方法
接下来,我们将讨论一些最广泛使用的方法来操作 NumPy 数组。
#11) 数字数组的形状
您可以使用 NumPy 数组的属性方法确定 NumPy 数组的形状,如下所示:np.shape()ndarray.shape
a = np.ones((2, 3))
print("Shape of the array - Method 1:", np.shape(a))
print("Shape of the array - Method 2:", a.shape)
>> 
Shape of the array - Method 1: (2, 3)
Shape of the array - Method 2: (2, 3) 
      
    #12) 重塑 NumPy 数组
重塑是指在不更改其数据的情况下为 NumPy 数组提供新形状。

您可以使用以下方法更改形状:np.reshape()
a = np.arange(10)
a.reshape((2, 5))
>> array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]]) 
      
    #13–14) 转置 NumPy 数组

如果要转置 NumPy 数组,可以使用该方法或如下所示:np.transpose()ndarray.T
a = np.arange(12).reshape((6, 2))
a.transpose()
>>
array([[ 0,  2,  4,  6,  8, 10],
       [ 1,  3,  5,  7,  9, 11]]) 
     a = np.arange(12).reshape((6, 2))
a.T
>> 
array([[ 0,  2,  4,  6,  8, 10],
       [ 1,  3,  5,  7,  9, 11]]) 
      
    #15–17) 连接多个 NumPy 数组以形成一个 NumPy 数组
您可以使用该方法联接数组序列并获取新的 NumPy 数组:np.concatenate()

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
>>
array([[1, 2],
       [3, 4],
       [5, 6]])
 
      
    
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b.T), axis=1)
>> 
array([[1, 2, 5],
       [3, 4, 6]])
 
     a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=None)
>>
array([1, 2, 3, 4, 5, 6])
 
    axis=0与 相同。np.vstack()axis=1与 相同。np.hstack()
#18) 扁平化数字数组

如果要将整个 NumPy 数组折叠到单个维度中,可以使用如下所示的方法:ndarray.flatten()
a = np.array([[1,2], [3,4]])
a.flatten()
>>
array([1, 2, 3, 4]) 
      
    #19) 数字数组的独特元素
若要确定 NumPy 数组的唯一元素,请使用如下所示的方法:np.unique()
a = np.array([[1, 2], [2, 3]])
np.unique(a)
>>
array([1, 2, 3])
 
     
a = np.array([[1, 2, 3], [1, 2, 3], [2, 3, 4]])
np.unique(a, axis=0)
>>
array([[1, 2, 3],
       [2, 3, 4]])
 
     a = np.array([[1, 1, 3], [1, 1, 3], [1, 1, 4]])
np.unique(a, axis=1)
>>
array([[1, 3],
       [1, 3],
       [1, 4]])
 
     #20) 挤压一个数字数组
        如果要从 NumPy 数组中删除长度为 1 的轴,请使用该方法。如下所示:np.squeeze()
x = np.array([[[0], [1], [2]]])
>>> x.shape
(1, 3, 1)
np.squeeze(x).shape
>>
(3,) 
     #21) 将 NumPy 数组转换为 Python 列表
要从 NumPy 数组中获取 python 列表,请使用如下所示的方法:ndarry.tolist()
a = np.array([[1, 1, 3], [1, 1, 3], [1, 1, 4]])
a.tolist()
>>
[[1, 1, 3], [1, 1, 3], [1, 1, 4]] 
      
    22-33) NumPy 数组的数学运算
NumPy提供了各种各样的元素数学函数,你可以应用于NumPy数组。您可以在此处阅读所有可用的数学运算。下面,让我们讨论一些最常用的。
#22–24) 三角函数
a = np.array([1,2,3])
print("Trigonometric Sine   :", np.sin(a))
print("Trigonometric Cosine :", np.cos(a))
print("Trigonometric Tangent:", np.tan(a))
>>
Trigonometric Sine   : [0.84147098 0.90929743 0.14112001]
Trigonometric Cosine : [ 0.54030231 -0.41614684 -0.9899925 ]
Trigonometric Tangent: [ 1.55740772 -2.18503986 -0.14254654]
 
      
    #25–28) 舍入函数
- 使用该方法返回逐元素楼层。
np.floor() - 使用该方法返回元素上限。
np.ceil() - 使用该方法舍入到最接近的整数。
np.rint() 
>>> a = np.linspace(1, 2, 5)
array([1.  , 1.25, 1.5 , 1.75, 2.  ])
>>> np.floor(a)
array([1., 1., 1., 1., 2.])
>>> np.ceil(a)
array([1., 2., 2., 2., 2.])
>>> np.rint(a)
array([1., 1., 2., 2., 2.]) 
      
    - 使用以下方法舍入到给定的小数位数:
np.round_() 
a = np.linspace(1, 2, 7)
np.round_(a, 2) # 2 decimal places
>>
array([1.  , 1.17, 1.33, 1.5 , 1.67, 1.83, 2.  ]) 
      
    #29–30) 指数和对数
- 使用该方法计算元素指数。
np.exp() - 使用该方法计算元素自然对数。
np.log() 
>>> a = np.arange(1, 6)
array([1, 2, 3, 4, 5])
>>> np.exp(a).round(2)
array([  2.72,   7.39,  20.09,  54.6 , 148.41])
>>> np.log(a).round(2)
array([0.  , 0.69, 1.1 , 1.39, 1.61]) 
      
    #31–32) 总和和乘积
- 使用该方法计算数组元素的总和:
np.sum() 
a = np.array([[1, 2], [3, 4]])
>>> np.sum(a)
10
>>> np.sum(a, axis = 0)
array([4, 6])
>>> np.sum(a, axis = 1)
array([3, 7]) 
      
    - 使用该方法计算数组元素的乘积:
np.prod() 
a = np.array([[1, 2], [3, 4]])
>>> np.prod(a)
24
>>> np.prod(a, axis = 0)
array([3, 8])
>>> np.sum(a, axis = 1)
array([2, 12]) 
      
    #33) 平方根
使用 np.sqrt() 方法计算数组元素的平方根:
a = np.array([[1, 2], [3, 4]])
np.sqrt(a)
>>
array([[1.        , 1.41421356],
       [1.73205081, 2.        ]])
 
      
    34-36)矩阵和向量运算
#34) 点积
如果要计算两个 NumPy 数组的点积,请使用以下方法:np.dot()
a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 1], [1, 1]])
np.dot(a, b)
>>
array([[3, 3],
       [7, 7]])
 
      
    #35) 矩阵产品
要计算两个 NumPy 数组的矩阵乘积,请使用 Python 中的 or 运算符:np.matmul()@
a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 1], [1, 1]])
>>> np.matmul(a, b)
array([[3, 3],
       [7, 7]])
>>> a@b
array([[3, 3],
       [7, 7]]) 
      
    注意: 在这种情况下,和 的输出是相同的,但它们可能会有很大不同。您可以在此处阅读它们的差异。
np.matmul()np.dot()
#36) 矢量范数
向量范数表示一组用于测量向量长度的函数。我已经有一篇关于向量范数的帖子,您可以在下面阅读:
机器学习中的向量规范
p范数指南。
towardsdatascience.com
a = np.arange(-4, 5)
>>> np.linalg.norm(a) ## L2 Norm
7.745966692414834
>>> np.linalg.norm(a, 1) ## L1 Norm
20.0 
       使用该方法查找矩阵或向量范数:np.linalg.norm()
37-38) 排序方法
#37) 对数字数组进行排序
若要就地对数组进行排序,请使用该方法。ndarray.sort()
a = np.array([[1,4],[3,1]])
>>> np.sort(a) ## sort based on rows
array([[1, 4],
       [1, 3]])
>>> np.sort(a, axis=None) ## sort the flattened array
array([1, 1, 3, 4])
>>> np.sort(a, axis=0) ## sort based on columns
array([[1, 1],
       [3, 4]]) 
      
    #38) 排序的 NumPy 数组中的索引顺序
若要返回将对数组进行排序的索引的顺序,请使用以下方法:np.argsort()
x = np.array([3, 1, 2])
np.argsort(x)
>>
array([1, 2, 0])
 
      
    39-42) 搜索方法
#39) 对应于最大值的指数
要返回沿轴的最大值的索引,请使用如下所示的方法:np.argmax()
>>> a = np.random.randint(1, 20, 10).reshape(2,5)
array([[15, 13, 10,  1, 18],
       [14, 19, 19, 17,  8]])
>>> np.argmax(a) ## index in a flattend array
6
>>> np.argmax(a, axis=0) ## indices along columns
array([0, 1, 1, 1, 0])
>>> np.argmax(a, axis=1) ## indices along rows
array([4, 1]) 
     要在非平展数组中查找索引,可以执行以下操作:
ind = np.unravel_index(np.argmax(a), a.shape)
ind
>>
(1, 1) 
      
    #40) 对应于最小值的指数
        同样,如果要返回沿轴的最小值的索引,请使用如下所示的方法:np.argmin()
>>> a = np.random.randint(1, 20, 10).reshape(2,5)
array([[15, 13, 10,  1, 18],
       [14, 19, 19, 17,  8]])
>>> np.argmin(a) ## index in a flattend array
3
>>> np.argmin(a, axis=0) ## indices along columns
array([1, 0, 0, 0, 1])
>>> np.argmin(a, axis=1) ## indices along rows
array([3, 4]) 
      
    #41) 根据条件搜索
如果要根据条件在两个数组之间进行选择,请使用如下所示的方法:np.where()
>>> a = np.random.randint(-10, 10, 10)
array([ 2, -3,  6, -3, -8,  4, -6, -2,  6, -4])
>>> np.where(a < 0, 0, a)
array([2, 0, 6, 0, 0, 4, 0, 0, 6, 0])
"""
if element < 0:
    return 0
else:
    return element
""" 
      
    #42) 非零元素索引
        若要确定 NumPy 数组中非零元素的索引,请使用以下方法:np.nonzero()
a = np.array([[3, 0, 0], [0, 4, 0], [5, 6, 0]])
np.nonzero(a)
>>
(array([0, 1, 2, 2]), array([0, 1, 0, 1]))
 
     43-45)统计方法
接下来,让我们看一下在 NumPy 数组上计算标准统计信息的方法。您可以在此处找到NumPy支持的所有统计技术。
#43) 平均值
要沿轴查找 NumPy 数组中值的平均值,请使用如下所示的方法:np.mean()
a = np.array([[1, 2], [3, 4]])
>>> np.mean(a)
2.5
>>> np.mean(a, axis = 1) ## along the row axis
array([1.5, 3.5])
>>> np.mean(a, axis = 0) ## along the column axis
array([2., 3.]) 
      
    #44) 中位数
若要计算 NumPy 数组的中位数,请使用该方法。np.median()
a = np.array([[1, 2], [3, 4]])
>>> np.median(a)
2.5
>>> np.median(a, axis = 1) ## along the row axis
array([1.5, 3.5])
>>> np.median(a, axis = 0) ## along the column axis
array([2., 3.]) 
      
    #45) 标准偏差
若要计算 NumPy 数组沿指定数组的标准偏差,请使用该方法。np.std()
a = np.array([[1, 2], [3, 4]])
>>> np.std(a)
1.118033988749895
>>> np.std(a, axis = 1) ## along the row axis
array([0.5, 0.5])
>>> np.std(a, axis = 0) ## along the column axis
array([1., 1.]) 
      
    














![[答疑]岛上没人穿鞋,卖鞋的愿景是什么](https://img-blog.csdnimg.cn/img_convert/2b81b0d77b2e9fd56e534cc1d724336d.png)


