NumPy 专业人士应该掌握的 45 个技能

news2024/11/24 10:49:52

一、说明

        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.])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法

文章目录 一、记录文件相关操作方法二、代码1.读取路径返回List\<File>2.读取路径返回List\<String>3.删除文件夹4.删除文件 一、记录文件相关操作方法 二、代码 1.读取路径返回List<File> import org.slf4j.LoggerFactory; import org.slf4j.Logger;impo…

【学会动态规划】按摩师(11)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

es通过rest接口_search、_delete_by_query查询与删除数据

1、rest接口查询数据 rest查询: http://localhost:9200/index_name/_search 查询表达式&#xff1a; {"query": {"wildcard": {"accountID": {"value": "v*"}}} }postman请求截图&#xff1a; 2、使用Rest接口删除数据 …

基于Lucene实现校园搜索引擎——太强搜索

完整资料进入【数字空间】查看——搜索"writebug" 实验环境 win10 一、实验内容 综合运用搜索引擎体系结构和核心算法方面的知识&#xff0c;基于开源资源搭建搜索引擎&#xff0c;具体包括如下几点&#xff1a; 抓取清华校园网内绝大部分资源&#xff0c;并且进行…

【NLP】温和解读:transformer的核心思想

变压器模型及其关键组件的概述。 一、介绍 在这篇博文中&#xff0c;我将讨论本世纪最具革命性的论文“注意力是你所需要的一切”&#xff08;Vaswani et al.&#xff09;。首先&#xff0c;我将介绍自我注意机制&#xff0c;然后介绍变形金刚的架构细节。在之前的博客文章《从…

【数据分析 最火 全集干货】Anaconda的安装及使用

关于我的专栏&#xff1a; 接下来会有许多关于“数据分析”的文章哦&#xff0c;记得看哦&#xff01;&#xff01;&#xff01; Python最详细最全面基础合集_adaptation_T_C的博客-CSDN博客 有兴趣&#xff0c;需要 的小伙伴可以免费订阅哦&#xff01;&#xff01;&#x…

阿里 P8 架构师 20 年经验!总结成微服务设计企业架构转型之道

前言 本文涉及两个方面的知识体系&#xff0c;即企业架构知识体系和软件架构知识体系。 企业架构和软件架构虽然都与 IT 相关&#xff0c;但其知识体系是完全不同的两个领域。一般而言&#xff0c;搞企业架构的人士不明白软件架构的细节和实现&#xff0c;而从事软件架构的架…

如何恢复损坏/删除的 Word 文件

有关如何修复不可读的 Microsoft Word 文件或 Rich Text 文件中的文本的分步说明。这些说明有助于从损坏的*.doc、*.docx、*.dot、*.dotx、*.rtf文件&#xff08;任何版本和大小&#xff09;中提取文本&#xff0c;只需单击几下&#xff1a; 从此处下载奇客数据恢复 &#xff…

React AntDesign写一个导出数据的提示语 上面有跳转的路径,或者点击知道了,关闭该弹层

效果如下&#xff1a; 代码如下&#xff1a; ForwardDataCenterModal(_blank);export const ForwardDataCenterModal (target?: string) > {let contentBefore React.createElement(span, null, 数据正在处理中&#xff0c;请稍后前往);let contentAfter React.creat…

【如何训练一个中译英翻译器】LSTM机器翻译模型训练与保存(二)

系列文章 【如何训练一个中译英翻译器】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 目录 系列文章1、加载训练集2、训练集数据处理3、网络搭建4、启动训练5、模型保存6、模型加载与推理 基于LSTM训练一个翻译器&#xff0c;要怎么做呢&#xff1f;其实很简单&am…

大厂案例 - 实时分析引擎

文章目录 概述内容收获思路建议 概述 网络安全态势越来越复杂&#xff0c;传统的基于单点的防护和攻击检测系统在应对现代网络攻击方面有着很大的局限性。 基于大数据平台&#xff0c;通过流式实时分析技术可以对全局网络空间进行实时的分析和异常检测&#xff0c;解决单点很…

2023年7月杭州/武汉/深圳制造业产品经理NPDP认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

独立开发者必备的29个开源React后台管理模板

React Web应用程序开发管理后台可能非常耗时&#xff0c;这和设计所有前端页面一样重要。 以下是收集的近几年顶级React.js管理模板列表。 这些模板确实很有价值&#xff0c;使开发人员更容易构建应用程序后端的用户界面。 此外&#xff0c;它们将帮助您完善网站的管理后台&…

Clion开发STM32之W5500系列(综合实验)

说明 此为w5500模块的综合实验测试模块,包含dhcp、dns、ntp以上三个模块的驱动参考之前的文章&#xff0c;本篇不做说明.使用的开发芯片 stm32f103vet6系列,外设接口使用的spi2 实验内容: 通过dhcp动态获取ip,通过dns解析NTP服务域名的ip通过NTP服务ip获取时间 w5500配置驱…

【oracle数据库】单行函数

Oracle数据库中的单行函数 1.字符函数2.数值函数3.转换函数4.判空函数5.条件取值 1.字符函数 --length()求字符串长度 select length(aslkd) from dual --substr(,起始点,截取长度) 起始点从1开始 截取字符串 select substr(asd,2,2) from dual --concat(,)字符串拼接 sele…

两个小封装电机驱动芯片:MLX813XX、A4950

一&#xff0e;MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案&#xff0c;MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片&#xff0c;可以满足汽车系统高品质和低成本的要…

[答疑]岛上没人穿鞋,卖鞋的愿景是什么

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 Kris 2023-7-6 19:55 上次给我们批作业您举了个例子&#xff0c;说卖鞋给岛上没人穿鞋&#xff0c;觉得您的解读很新颖&#xff0c;不过当时没听太明白&#xff0c;翻您的书貌似没有这个内容。…

分布式存储在云环境下的应用和部署

随着互联网数据规模越来越大&#xff0c;并发请求越来越高&#xff0c;传统的关系数据库系统在性能、价格、可扩展性方面已经不能很好地满足需求。谷歌、亚马逊等互联公司率先在后台基础设施中引入超大规模分布式存储系统&#xff0c;用来解决海量数据的存储问题。与传统的集中…

自动化测试如何做?自动化测试疑难问题+解答,进阶高级测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 你们的自动化&…

QT的内存回收机制

QT的内存回收机制 QT中内存回收的本质 Qt中有内存回收机制, 但是不是所有被new出的对象被自动回收, 满足条件才可以回收 如果想要在Qt中实现内存的自动回收, 需要满足以下两个条件: 创建的对象必须是QObject类的子类(间接子类也可以)创建出的类对象, 必须要指定其父对象是谁,…