【数据分析:工具篇】NumPy(1)NumPy介绍
【数据分析:工具篇】NumPy(1)NumPy介绍
- NumPy介绍
- NumPy的特点
- 数组的基本操作
- 创建数组
- 索引和切片
- 数组运算
NumPy介绍
NumPy(Numerical Python)是Python的一个开源的科学计算库,它主要用于处理大规模的多维数组以及矩阵操作。NumPy是在Python中进行科学计算的基础库,许多其他的科学计算库都是基于NumPy进行开发的,包括Scipy、Pandas等。
NumPy是Python中非常重要的科学计算库之一,它提供了丰富的多维数组对象、高效的向量化计算、数组操作、数组切片和索引、广播机制、矩阵计算、随机数生成、通用函数、数学函数和统计函数、数据类型转换等各种强大的功能,可以方便地进行数据处理、科学计算、统计分析和机器学习等任务。如果你想要在Python中进行数据科学或机器学习的任务,那么学习和掌握NumPy是非常有必要的。
NumPy的核心是多维数组(ndarray),它可以用来表示向量、矩阵以及更高维的数组。NumPy中的数组操作都是在底层以C语言的形式实现的,因此它非常高效。
NumPy的安装非常简单,可以通过pip命令来安装,例如:
pip install numpy
安装完成之后,就可以在Python中导入NumPy:
import numpy as np
NumPy的特点
NumPy具有以下特点一些:
- 多维数组对象:NumPy最主要的特点是其多维数组对象ndarray,这种数组可以存储任意类型的数据,并且可以进行高效的数组计算。这种数组可以在一些数据分析和科学计算任务中替代传统的Python列表,因为它的存储和计算效率更高。
- 内置的数据类型:NumPy支持多种数据类型,包括整型、浮点型、复数、布尔型等,可以根据不同的需求进行选择。
- 随机数生成:NumPy中的random模块提供了各种随机数生成函数,例如rand()、randn()、randint()等,可以生成各种不同类型的随机数,这些随机数在模拟、实验和数据分析等任务中都非常有用。
- 数据类型转换:NumPy提供了各种数据类型转换函数,可以将数组从一种数据类型转换成另一种数据类型,例如astype()函数可以将数组的数据类型转换成指定的数据类型,这些函数在数据预处理和清洗中经常使用。
- 方便的数组索引和切片:NumPy支持各种不同的数组切片和索引方式,包括基于整数和布尔值的索引方式,以及基于轴向的索引方式,这使得数据的选择和处理变得更加方便和高效。
- 数组操作:NumPy提供了许多用于操作数组的函数,例如:reshape、concatenate、split、flatten等等。这些函数使得数组的操作变得更加容易和灵活。
- 通用函数:NumPy中的ufunc(通用函数)可以对数组进行逐元素操作,例如exp()、log()、sin()、cos()等等,这些函数在数学计算和科学计算中都经常使用。
- 数学函数和统计函数:NumPy提供了各种数学函数和统计函数,例如sum()、mean()、median()、std()、var()等等,可以方便地计算数组的各种统计量和数学函数值。
- 广播机制:广播机制是NumPy中一种非常重要的特点,它可以使得不同形状的数组进行计算时,它会自动将较小的数组进行复制和扩展,以适应较大的数组形状,避免了显式地进行循环操作,从而使得数组之间的计算变得更加方便和高效。
- 文件输入输出:NumPy提供了各种文件输入输出函数,例如load()、save()、savetxt()等,可以方便地读取和保存多维数组数据,这些函数对于数据分析和机器学习等领域非常有用。
- 快速、高效:NumPy是用C语言编写的,因此可以快速地执行计算,而且在内存使用方面也做了优化,所以处理大型数据集时非常高效。
- 内存管理:NumPy提供了各种内存管理函数和方法,例如reshape()、resize()、flatten()、ravel()等,可以方便地操作数组的形状和大小,避免了不必要的内存分配和拷贝。
- 大数据处理:NumPy中的数组可以处理大量的数据,因为它使用了连续的内存块,所以可以高效地处理大型数据集。
- 高效的向量化计算:NumPy支持向量化计算,即在数组上进行运算,而不是在单个元素上进行计算,这种运算方式非常高效,并且可以利用现代CPU的并行计算能力。因此,如果你需要进行数组计算或矩阵计算,那么NumPy是一个非常好的选择。
- 矩阵计算:除了多维数组的支持之外,NumPy还提供了矩阵计算相关的函数和方法,例如dot()函数可以实现矩阵乘法运算。这些函数和方法在科学计算和机器学习等领域中经常被使用。
- 可以与其他科学计算库配合使用:NumPy与其他许多Python科学计算库(如SciPy、Pandas、Matplotlib等)兼容性良好,可以方便地与它们进行集成,实现更加复杂的科学计算任务。
- 可视化:NumPy可以通过与Matplotlib等可视化库的集成,实现数据可视化。
- 可扩展性:NumPy的底层代码是用C和Fortran编写的,可以通过Cython等工具将Python代码转换为C代码,从而提高代码的性能。
- 开源和免费:NumPy是开源和免费的软件,可以在任何操作系统上使用,并且可以自由地修改和分发。
数组的基本操作
创建数组
可以使用NumPy中的array函数来创建数组,例如:
a = np.array([1, 2, 3])
print(a)
输出结果为:
[1 2 3]

可以使用dtype参数来指定数组的数据类型:
b = np.array([1, 2, 3], dtype=float)
print(b)
输出结果为:
[1. 2. 3.]

可以使用zeros、ones、empty等函数来创建特定形状的数组。
生成全为0的数组。
c = np.zeros((2, 3))
print(c)
输出结果为:
[[0. 0. 0.][0. 0. 0.]]

生成全为1的数组。
d = np.ones((2, 3))
print(d)
输出结果为:
[[1. 1. 1.][1. 1. 1.]]

生成随机数。
e = np.empty((2, 3), dtype=np.float64)
print(e)
输出结果为:
[[6.23042070e-307 3.56043053e-307 1.37961641e-306][2.22518251e-306 1.33511969e-306 1.24610383e-306]]

索引和切片
可以使用整数索引和切片来访问数组中的元素,例如:
a = np.array([1, 2, 3, 4, 5])
print(a[0])
print(a[1:3])
输出结果为:
1
[2 3]

可以使用多维索引和切片来访问多维数组中的元素,例如:
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b[0, 0])
print(b[1:3, 1:3])
输出结果为:
1
[[5 6][8 9]]

数组运算
可以使用NumPy中的各种函数来对数组进行运算,例如:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
输出结果为:
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]

可以使用各种函数来对数组进行操作,例如:
a = np.array([1, 2, 3])
print(np.sqrt(a))
print(np.exp(a))
print(np.sin(a))
输出结果为:
[1. 1.41421356 1.73205081]
[ 2.71828183 7.3890561 20.08553692]
[0.84147098 0.90929743 0.14112001]

可以使用dot函数来进行矩阵乘法运算,例如:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.dot(a, b))
输出结果为:
[[19 22][43 50]]

相关文章:
【数据分析:工具篇】NumPy(1)NumPy介绍
【数据分析:工具篇】NumPy(1)NumPy介绍NumPy介绍NumPy的特点数组的基本操作创建数组索引和切片数组运算NumPy介绍 NumPy(Numerical Python)是Python的一个开源的科学计算库,它主要用于处理大规模的多维数组…...
mysql时区问题
设置mysql容器时间与服务器时间一致 问题背景: 今天测试发现一个问题,时间不一致,当工单入库时,其创建时间和更新时间应该是一样的,即使不一样最多只会错几秒的时间;实际上两个时间相差的大概8小时&#…...
磨金石教育摄影技能干货分享|高邮湖上观花海
江苏高邮,说到这里所有人能想到的,就是那烟波浩渺的高邮湖。高邮在旅游方面并不出名,但是这里的自然人文景观绝对不输于其他地方。高邮不止有浩瀚的湖泊,春天的油菜花海同样壮观。春日的午后,与家人相约游玩࿰…...
mysql navicat忘记密码
mysql忘记密码是常用的事情,那么如何解决它呢?1、首先将MySQL的服务关闭,两种方法:(1)打开命令行cmd输入net stop mysql命令即可关闭MySQL服务。(2)打开任务管理器,找到服…...
Git的下载、安装、配置、使用、卸载
前言 我是跟着狂神老师学的。该博客仅用于笔记所用。 下面是老师的B站和笔记 B站:https://www.bilibili.com/video/BV1FE411P7B3?p1&vd_source9266cf72b1f398b63abe0aefe358d7d6 笔记:https://mp.weixin.qq.com/s/Bf7uVhGiu47uOELjmC5uXQ 一、准备工…...
【博客631】监控网卡与进程网络IO使用情况
监控进程的网络IO使用情况 1、vnstat 由于 vnstat 依赖于内核提供的信息,因此执行以下命令来验证内核是否提供了 vnStat 所期望的所有信息: # vnstat --testkernel This test will take about 60 seconds. Everything is ok.不带任何参数的 vnstat 将…...
【Leetcode】【简单】35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入:…...
sql面试题
mysql优化 优化准则: 建表时:合理选择字段的类型,单表字段数量 sql查询尽量单表操作,避免复杂操作,复杂的多表通过java代码实现 构建复合索引优化,索引尽量可以覆盖主要业务查询 sql避免索引失效 避免大…...
SQL 进阶刷题笔记
SQL 进阶刷题笔记 一、MySQL 进阶 这里主要是 MySQL 刷题相关笔记,方便后面温习和查阅,希望可以帮到大家!!! 题1 请计算每张SQL类别试卷发布后,当天5级以上的用户作答的人数uv和平均分avg_score࿰…...
[网鼎杯 2020 朱雀组]Think Java
SqlDict.java ,其中sql语句处存在sql注入漏洞 package .sqldict;import cn.abc.core.sqldict.Row; import cn.abc.core.sqldict.Table; import java...
AIR32F103(十) 在无系统环境和FreeRTOS环境集成LVGL
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告AIR32F103(二) Linux环境和LibOpenCM3项目模板AIR32F103(三) Linux环境基于标准外设库的项目模板AIR32F103(四) 27倍频216MHz,CoreMark跑分测试AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码AIR32F103(六) ADC,I2S…...
SpringBoot接口 - 如何统一异常处理
SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例,如何优雅的将参数校验的错误信息统一处理并封装返回呢?为什么要优雅的处理异常如果我们不统一的处理异常,经常会在controller层有大量的异常…...
如何使用Python进行数据可视化
数据可视化是一种将数据呈现为图形或图表的技术,它有助于理解和发现数据中的模式和趋势。Python是一种流行的编程语言,有很多库可以帮助我们进行数据可视化。在本文中,我们将介绍使用Python进行数据可视化的基本步骤。 第一步:导…...
vue -- 自定义指令钩子函数补充 自定义过滤器filter参数
自定义指令补充 自定义指令通过钩子函数的形式来实现自定义的功能 这里是几个常用的钩子函数以及它的方法: bind:只调用一次,指令第一次绑定到元素时调用,在这里可以进行一次性的初始化设置。 inserted:被绑定元素插…...
Qt不会操作?Qt原理不知道? | Qt详细讲解
文章目录Qt界面开发必备知识UI界面与控件类型介绍Qt设计器原理控件类型的介绍信号与槽机制处理常用控件创建与设置常见展示型控件创建与设置常见动作型控件创建与设置常见输入型控件创建与设置常见列表控件创建于设置Qt中对象树的介绍项目源码结构刨析.pro.hmain.cpp.cppQt界面…...
LeetCode-面试题 17.05. 字母与数字【前缀和,哈希表】
LeetCode-面试题 17.05. 字母与数字【前缀和,哈希表】题目描述:解题思路一:前缀和。数字为-1,字母为1。我们需要找到的子数组是前缀和之差为0的,例如s[right]-s[left]0,那么s[right]s[left],变为…...
华为OD机试题 - 叠放书籍(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:叠放书籍题目输入输出示例一输入输出Code解题思路版权说明华为O…...
【数据库概论】第十一章 数据库并发控制
第十一章 并发控制 在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务并行运行,这就是同时并发方式。当多个用户并发存取数据库时会产生多个事务同时存取同一事务的情况,如果…...
Nginx配置实例-反向代理案例二
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口服务 nginx监听端口为9000, 访问 http://127.0.0.1:9000/edu/ 直接跳转到127.0.0.1:8080 访问 http://127.0.0.1:9000/vod/ 直接跳转到127.0.0.1:8081 一、准备工作 1. 准备两个tom…...
HTML 字符集
为了正确显示 HTML 页面,Web 浏览器必须知道要使用哪个字符集。 从 ASCII 到 UTF-8 ASCII 是第一个字符编码标准。ASCII 定义了 128 种可以在互联网上使用的字符:数字(0-9)、英文字母(A-Z)和一些特殊字符…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
