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

news2024/11/15 12:42:01

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

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

import numpy as np
import pandas as pd

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

1.从Python列表

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

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

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

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

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

图片

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

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)

对于多维NumPy数组:

np.zeros((2, 3))

3.创建填充1的NumPy数组

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

np.ones((2, 3))

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(5, 11)
  • start=5开始到step=11为止,每隔step=2生成一个值:

np.arange(5, 11, 2)

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()方法:

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

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

10.NumPy数组的形状

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

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

11.重塑NumPy数组

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

图片

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

a = np.arange(10)
a.reshape((2, 5))

12.转置NumPy数组

图片

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

a = np.arange(12).reshape((6, 2))
a.transpose()
a = np.arange(12).reshape((6, 2))
a.T

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

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

图片

## 按行连接

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

图片

## 按列连接

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b.T), axis=1)
## 连接以生成一维NumPy数组

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

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

14.展平NumPy数组

图片

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

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

15.NumPy数组中的唯一元素

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

a = np.array([[1, 2], [2, 3]])
np.unique(a)
## 返回唯一行
a = np.array([[1, 2, 3], [1, 2, 3], [2, 3, 4]])
np.unique(a, axis=0)
## 返回唯一列
a = np.array([[1, 1, 3], [1, 1, 3], [1, 1, 4]])
np.unique(a, axis=1)

16.挤压NumPy数组

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

x = np.array([[[0], [1], [2]]])

>>> x.shape
(1, 3, 1)

np.squeeze(x).shape

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

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

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

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

18.三角函数

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

19.舍入函数

  • 使用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) # 保留两位小数

20.指数和对数

  • 使用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])

21.求和

使用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])

22.乘积

使用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])

23.平方根

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

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

矩阵和向量运算:

24.点积

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

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

25.矩阵乘积

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

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

26.向量范数

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

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

a = np.arange(-4, 5)

>>> np.linalg.norm(a) ## L2范数
7.745966692414834

>>> np.linalg.norm(a, 1) ## L1范数
20.0

排序方法:

27.对NumPy数组进行排序

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

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

>>> np.sort(a) ## 按行排序
array([[1, 4],
       [1, 3]])

>>> np.sort(a, axis=None) ## 对展平后的数组进行排序
array([1, 1, 3, 4])

>>> np.sort(a, axis=0) ## 按列排序
array([[1, 1],
       [3, 4]])

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

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

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

搜索方法:

29.对应最大值的索引

要返回沿轴的最大值的索引,请使用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) ## 在展平后的数组中寻找最大值的索引
6

>>> np.argmax(a, axis=0) ## 按列寻找每列最大值的索引
array([0, 1, 1, 1, 0])

>>> np.argmax(a, axis=1) ## 按行寻找每行最大值的索引
array([4, 1])

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

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

30.对应最小值的索引

类似地,如果想返回沿轴的最小值的索引,请使用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) ## 在展平后的数组中寻找最小值的索引
3

>>> np.argmin(a, axis=0) ## 按列寻找每列最小值的索引
array([1, 0, 0, 0, 1])

>>> np.argmin(a, axis=1) ## 按行寻找每行最小值的索引
array([3, 4])

31.基于条件的搜索

想根据条件在两个数组之间进行选择,使用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
"""

32.非零元素的索引

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

a = np.array([[3, 0, 0], [0, 4, 0], [5, 6, 0]])
np.nonzero(a)

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

33.平均值

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

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

>>> np.mean(a)
2.5

>>> np.mean(a, axis = 1) ## 沿行轴计算平均值
array([1.5, 3.5])

>>> np.mean(a, axis = 0) ## 沿列轴计算平均值
array([2., 3.])

34.中位数

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

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

>>> np.median(a)
2.5

>>> np.median(a, axis = 1) ## 沿行轴求中位数
array([1.5, 3.5])

>>> np.median(a, axis = 0) ## 沿列轴求中位数
array([2., 3.])

35.标准差

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

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

>>> np.std(a)
1.118033988749895

>>> np.std(a, axis = 1) ## 沿行轴计算标准差
array([0.5, 0.5])

>>> np.std(a, axis = 0) ## 沿列轴计算标准差
array([1., 1.])

 

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

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

相关文章

如何在vscode中对在服务器上多卡运行的bash脚本进行debug?

问题描述 使用vscode可以很方便地添加断点&#xff0c;进行代码调试。 在使用服务器时&#xff0c;我们的python代码通常是通过bash脚本来执行的&#xff0c;那么如何进行debug呢&#xff1f; 待运行的bash 脚本示例 前半段定义了一些参数&#xff0c;后半段是执行python代码…

一步一步测试DNS隧道

目录 0、前言 1、DNS解析 1.1 DNS简介 1.2 DNS查询类型 1.3 DNS解析过程 2、DNS隧道准备工作 2.1 DNS隧道介绍 2.1.1 什么是DNS隧道&#xff1f; 2.1.2 DNS隧道的原理 2.2 客户端、服务端准备 2.3 域名准备 2.4 连接隧道 2.5 遇坑 3、隧道确认和利用…

编码行缩进

GitHub 曾经对 400,000 个 GitHub 存储库、10 亿个文件、14 TB 的代码的统计&#xff0c;发现大部分语言还是使用空格的多&#xff0c;除了 Go 语言&#xff1a; 空格的优缺点 优点&#xff1a; 一致性&#xff1a;空格可以确保代码在不同的编辑器和查看工具中看起来是一致的…

Python自动化测试之Selenium各浏览器驱动下载网址

在自动化测试领域&#xff0c;Selenium无疑是一个不可或缺的工具。它允许开发者编写脚本来模拟用户在浏览器中的操作&#xff0c;从而进行自动化测试。然而&#xff0c;为了使用Selenium控制不同的浏览器&#xff0c;我们需要安装相应的浏览器驱动&#xff08;WebDriver&#x…

Istio_01_Istio初识

文章目录 IstioService Mesh Istio Istio: 以服务网格形态用于服务治理的开放平台和基础设施 本质: 以非侵入式治理服务之间的访问和调用服务治理: 流量管理、可观测性、安全性可同时管理多类基础设施(多种网络方案) 如: Istio和Kubernetes架构的结合 Istio通过Kubernetes的域…

SpringBoot 2.x 配置ssl - 自签证书/信用库

文章目录 前言SpringBoot 2.x 配置ssl - 自签证书/信用库1. yml 配置2. 当服务器为客户端发送https请求时改造 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换&#xff0c;效率过低&#xff0c;所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本&#xff08;Build 19041 及更高版本&#xff09;或 Win…

Docker简单快速入门

1. 安装Docker 基于 Ubuntu 24.04 LTS 安装Docker 。 # 更新包索引并安装依赖包 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置 curl -fsSL https://mirror…

记一次Mycat分库分表实践

一、分库分表 在系统的研发过程中,随着数据量的不断增长,单库单表已无法满足数据的存储需求,此时就需要对数据库进行分库分表操作。 分库分表是随着业务的不断发展,单库单表无法承载整体的数据存储时,采取的一种将整体数据分散存储到不同服务器上的不同数据库中的不同数…

【C++BFS算法】2192. 有向无环图中一个节点的所有祖先

本文涉及知识点 CBFS算法 LeetCode2192. 有向无环图中一个节点的所有祖先 给你一个正整数 n &#xff0c;它表示一个 有向无环图 中节点的数目&#xff0c;节点编号为 0 到 n - 1 &#xff08;包括两者&#xff09;。 给你一个二维整数数组 edges &#xff0c;其中 edges[i]…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染&#xff01;这一次内容比较多&#xff0c;我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步&#xff0c;还是老规矩&#xff0c;先准备好接口函数。方便我们的页面组件拿到对…

Vue Router基础

Router 的作用是在单页应用&#xff08;SPA&#xff09;中将浏览器的URL和用户看到的内容绑定起来。当用户在浏览不同页面时&#xff0c;URL会随之更新&#xff0c;但页面不需要从服务器重新加载。 1 Router 基础 RouterView RouterView 用于渲染当前URL路径对应的路由组件。…

【Linux】-----工具篇(yum介绍)

目录 Ⅰ、是什么&#xff1f; Ⅱ、Linux下安装软件的三种方式 ①源代码安装 ②rpm包安装 ③yum安装 Ⅲ、yum相关操作 1.查看软件包 2.安装软件 3.卸载软件 Ⅳ、yum本地配置 Ⅰ、是什么&#xff1f; yum是包管理器&#xff0c;也就像一个软件下载安装管理的客户端&…

vsftpd搭建FTP服务器 - 虚拟用户

命令记录 $ sudo apt install vsftpd db-util $ sudo nano /etc/vsftpd.conf $ sudo nano /etc/vsftpd/vsftpd-virtual-users.txt $ sudo db_load -T -t hash -f /etc/vsftpd/vsftpd-virtual-users.txt /etc/vsftpd/vsftpd-virtual-users.db ls /etc/vsftpd/vsftpd-virtual-us…

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞&#xff0c;这些漏洞可能被恶意攻击者利用&#xff0c;从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

Cyberchef基础概念之-分叉合并-fork/merge

本文将介绍如何利用cyberchef中的fork和merge操作&#xff0c;通过对数据进行分叉和合并对数据进行分类处理。为读者提供数据处理多种思路&#xff0c;使得读者能够在日常的工作中灵活的应对数据中的不同部分&#xff0c;还原被编码数据的原貌。 fork和merge操作是Cyberchef非…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中&#xff0c;有介绍过前端触发的通知服务。 【odoo】右上角的提示&#xff08;通知服务&#xff09; 此文章则介绍后端触发方法。 内容 直接上代码&#xff1a;但是前提一定是按钮触发&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; def bu…

OZON宠物产品推荐,OZON那些宠物产品卖得好

俄罗斯人在为他们的“毛孩子”&#xff08;通常指宠物&#xff0c;特别是狗和猫&#xff09;选择玩具时&#xff0c;同样展现出对多种类型和风格的偏好。结合当前的市场趋势和Ozon等电商平台的热销数据&#xff0c;以下是几款俄罗斯人最喜欢的宠物玩具及其特点&#xff1a; OZ…

C++ 代码实现局域网即时通信功能 (windows 系统 客户端)

本项目使用C实现具备多个客户端和服务器端即时通信聊天功能软件 一&#xff1a;项目内容 使用C实现一个具备多客户端和一个服务器端即时通信功能的聊天软件。 本项目的目的是 学习在windows平台下&#xff0c;进行C网络开发的基本概念&#xff1a;TCP/IP socket通信&#xff0…