Python 数据分析(一):NumPy 基础知识

目录
    • 1. 简介
    • 2. 使用
      • 2.1 ndarray
      • 2.2 数据类型
      • 2.3 索引与切片
      • 2.4 副本与视图
      • 2.5 轴的概念
      • 2.6 基本运算
      • 2.7 常用操作

1. 简介

NumPy(Numerical Python)是一个开源的 Python 科学计算扩展库,主要用来处理任意维度数组与矩阵,通常对于相同的计算任务,使用 NumPy 要比直接使用 Python 基本数据结构要简单、高效的多。安装使用 pip install numpy 命令即可。

2. 使用

2.1 ndarray

ndarray 即 n 维数数组类型,它是一个相同数据类型的集合,以 0 下标为开始进行集合中元素的索引。

创建数组可以使用 NumPy 的 array 方法,具体格式如下:

array(p_object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)

  • p_object:数组或嵌套的数列

  • dtype:数组元素的数据类型

  • copy:是否需要复制

  • order:创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认)

  • subok:默认返回一个与基类类型一致的数组

  • ndmin:生成数组的最小维度

当然,还可以使用 arange 方法,下面看一下具体使用示例。

创建数组

看一下如何创建一维数组

import numpy as nparr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array(range(1, 6))
arr3 = np.arange(1, 6)
print (arr1)
print (arr2)
print (arr3)

看一下如何创建多维数组,以二维数组为例

import numpy as nparr = np.array([[1, 2], [3, 4], [5, 6]])
print(arr)

常用属性

通过示例来看一下 ndarray 对象的常用属性

import numpy as nparr = np.array([1, 2, 3])
# 元素类型
print(arr.dtype)
# 形状
print(arr.shape)
# 元素个数
print(arr.size)
# 维度
print(arr.ndim)
# 每个元素大小(字节)
print(arr.itemsize)

改变数组的形状

import numpy as nparr = np.arange(30)
print(arr)
# 变成二维数组
arr.shape = (5, 6)
print(arr)
# 变成三维数组
arr = arr.reshape((2, 3, 5))
print(arr)
2.2 数据类型

通过下表来看一下 NumPy 的常用数据类型。

类型描述
int_默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc与 C 的 int 类型一样,一般是 int32 或 int 64
intp用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8字节(-128 to 127)
int16整数(-32768 to 32767)
int32整数(-2147483648 to 2147483647)
int64整数(-9223372036854775808 to 9223372036854775807)
uint8无符号整数(0 to 255)
uint16无符号整数(0 to 65535)
uint32无符号整数(0 to 4294967295)
uint64无符号整数(0 to 18446744073709551615)
bool_布尔型数据类型(True 或者 False)
float_float64 类型的简写
float16半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_complex128 类型的简写,即 128 位复数
complex64复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128复数,表示双 64 位浮点数(实数部分和虚数部分)

通过示例来看一下如何修改数据类型。

import numpy as nparr1 = np.array([1, 2, 3])
arr2 = np.array([1.111, 2.222, 3.333])
# 当前数据类型
print(arr1.dtype)
# 修改数据类型
arr1 = arr1.astype(np.int64)
print(arr1.dtype)
# 保留一位小数
arr2 = np.round(arr2, 1)
print(arr2)
2.3 索引与切片

NumPy 数组支持索引、切片操作,还可以进行迭代,先看一下一维数组。

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
print(arr[3])
# 修改元素值
arr[3] = 10
print(arr[3])
print(arr[2:])
print(arr[2:4])
print(arr[4:])
for i in arr:print(i)

再看一下多维数组的这些操作。

import numpy as nparr = np.arange(12).reshape(3, 4)
print(arr)
# 取某一个值
print(arr[2, 3])
# 取多个不连续的值
print(arr[[0, 2],[1, 3]])
# 取一行
print(arr[0])
# 连续取多行
print(arr[1:])
# 取不连续的多行
print(arr[[0, 2]])
# 取一列
print(arr[:, 0])
# 连续取多列
print(arr[:, 2:])
# 取不连续的多列
print(arr[:, [0, 2]])
2.4 副本与视图

视图(浅复制)只是原有数据的一个引用,通过该引用可访问、操作原有数据,如果我们对视图进行修改,它会影响原始数据,因为浅复制共享内存。

副本(深复制)是对数据的完整拷贝,如果我们对副本进行修改,它不会影响到原始数据,因为深复制不共享内存。

调用 ndarray 的 view() 方法会产生一个视图,下面通过示例来看一下。

import numpy as npa = np.arange(6).reshape(2,3)
# 创建视图
b = a.view()
print('a的id:', id(a))
print('b的id:', id(b))
# 修改 b 的形状
b.shape =  3,2
print('a的形状:')
print(a)
print('b的形状:')
print(b)
print(a is b)

调用 ndarray 的 copy() 方法会产生一个副本,下面通过示例来看一下。

import numpy as npa = np.arange(1, 6)
# 创建副本
b = a.copy()
print(a is b)
b[1] = 10
print(a[1])
print(b[1])
2.5 轴的概念

NumPy 中的轴简单来说就是方向的意思,使用数字 0、1、2 表示,一维数组只有 0 轴,二维数组有 0、1 轴,三维数组有 0、1、2 轴,了解轴的相应概念可以方便我们进行相应计算。

2.6 基本运算

数组与数字之间运算

看一下数组与数字之间的加、减、乘、除运算。

import numpy as nparr = np.arange(12).reshape(3, 4)
print(arr + 3)
print(arr - 1)
print(arr * 2)
print(arr / 3)

数组与数组之间运算

看一下数组与数组之间的运算。

import numpy as np# 相同行数,相同列数
a = np.arange(12).reshape(3, 4)
b = np.arange(20, 32).reshape(3, 4)
print(a + b)
print(b * a)
# 相同行数
c = np.arange(12).reshape(3, 4)
d = np.arange(3).reshape(3, 1)
print(c + d)
print(c - d)
# 相同列数
e = np.arange(12).reshape(4, 3)
f = np.arange(3).reshape(1, 3)
print(e * f)
print(e - f)

常用数学运算

import numpy as nparr = np.array([[33, 55], [11, 66], [22, 99]])
print(arr)
# 最大值
print(np.max(arr))
# 最小值
print(np.min(arr))
# 某一轴上的最大值
print(np.max(arr, 1))
# 某一轴上的最小值
print(np.min(arr, 1))
# 平均值
print(np.mean(arr))
# 某一行、一列的平均值
print(np.mean(arr, axis=1))
# 最大值索引
print(np.argmax(arr))
print(np.argmax(arr, axis=1))
# 最小值索引
print(np.argmin(arr))
print(np.argmin(arr, axis=1))
# 极差
print(np.ptp(arr))
print(np.ptp(arr, axis=1))
# 方差
print(np.var(arr))
# 标准差
print(np.std(arr))
# 中位数
print(np.median(arr))
2.7 常用操作

添加操作

NumPy 的 append() 方法可以在数组的末尾添加值,该操作会分配至整个数组,并把原数组复制到新数组,该操作需保证输入的维度匹配,下面看一下使用示例。

import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])
# 添加元素
print(np.append(arr, [1, 1, 3]))
# 沿 0 轴添加元素
print(np.append(arr, [[1, 1, 3]], axis=0))
# 沿 1 轴添加元素
print(np.append(arr, [[1, 1, 3], [2, 1, 5]], axis=1))

我们还可以使用 insert() 方法进行添加操作,该方法在给定索引前沿给定轴向数组中插入值,下面看一下使用示例。

import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])
# 添加元素
print(np.insert(arr, 1, [1, 1, 3]))
# 沿 0 轴添加元素
print(np.insert(arr, 1, [1, 1, 3], axis=0))
# 沿 1 轴添加元素
print(np.insert(arr, 1, [1, 5], axis=1))

删除操作

NumPy 的 delete() 可以对数组进行删除操作,下面看一下使用示例。

import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])
# 删除元素
print(np.delete(arr, 1))
# 沿 0 轴删除元素
print(np.delete(arr, 1, axis=0))
# 沿 1 轴删除元素
print(np.delete(arr, 1, axis=1))

去重操作

NumPy 的 unique() 方法可以去除数组中的重复元素。

import numpy as nparr = np.array([1, 3, 5, 2, 4, 6, 1, 5, 3])
# 去除重复元素
print(np.unique(arr))
# 去重数组的索引数组
u, indices = np.unique(arr, return_index=True)
print(indices)
# 去重元素的重复数量
u, indices = np.unique(arr, return_counts=True)
print(indices)

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

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

相关文章

编程与数学 03-002 计算机网络 04_数据链路层功能

编程与数学 03-002 计算机网络 04_数据链路层功能一、数据链路层的基本任务(一)封装成帧(二)差错控制(三)流量控制二、差错检测与纠正方法(一)常用的差错检测码(二&#…

latex中既控制列内容位置又控制列宽,使用>{\centering\arraybackslash}p{0.85cm}

示例:\usepackage{array} % 为 >{...} 修饰符提供支持\begin{table*}[ht!]\centering \begin{tabular}{p{2.8cm} >{\centering\arraybackslash}p{0.85cm} >{\centering\arraybackslash}p{0.85cm} >{\centering\arraybackslash}p{0.85cm} >{\ce…

医疗数据挖掘Python机器学习案例

1. 医疗数据挖掘概述 医疗数据挖掘是从大量的医疗数据中提取有价值信息和知识的过程,旨在辅助医疗决策、疾病预测、治疗方案优化等。随着医疗信息化的发展,电子病历、医疗影像、基因数据等多源异构数据不断积累,为医疗数据挖掘提供了丰富的素…

人工智能概述

🌟 欢迎来到AI奇妙世界! 🌟 亲爱的开发者朋友们,大家好!👋 我是人工智能领域的探索者与分享者,很高兴在CSDN与你们相遇!🎉 在这里,我将持续输出AI前沿技术、实…

C++性能优化擂台技术文章大纲

引言性能优化在C开发中的重要性擂台赛形式的优势:激发创意,展示不同优化技巧目标读者:中高级C开发者擂台赛规则设计统一基准测试环境(硬件、编译器、优化标志)参赛代码需通过功能正确性验证性能指标:执行时…

AI人工智能时代,Bard的智能家政服务助手

AI人工智能时代,Bard的智能家政服务助手 关键词:人工智能、智能家居、Bard助手、机器学习、自然语言处理、物联网、智能服务 摘要:本文深入探讨了AI人工智能时代下,基于Bard技术的智能家政服务助手的实现原理、技术架构和应用场景。我们将从核心技术入手,分析其背后的机器…

MySQL(155)什么是MySQL的事件调度器?

MySQL的事件调度器(Event Scheduler)是一种强大的工具,用于在指定的时间间隔或特定时间点自动执行SQL语句。它类似于操作系统中的任务计划程序或Cron作业,适用于需要定时执行的任务,如数据归档、定期报告生成、定时清理…

【Zephyr开发实践系列】09_LittleFs文件系统操作

文章目录前言编写目的术语和缩写词方案选择一、Littlefs介绍二、Littlefs搭建步骤1.设备树构建2.自动挂载流程(二选一)2.1设备树启用自动挂载2.2 在 littlefs_fs.c 中,设备树宏会被展开2.3 模块注册初始化2.4 初始化阶段2.4.1注册Littlefs文件…

保护板测试仪:守护电池安全的“幕后卫士”

在现代科技飞速发展的今天,电池作为各类电子设备和新能源系统的核心动力源,其安全性与稳定性直接关系到设备的正常运行和使用者的安全。而保护板作为电池的“安全卫士”,承担着过充保护、过放保护、短路保护等关键功能。保护板测试仪则是专门…

【unitrix】 6.11 二进制数字标准化模块(normalize.rs)

一、源码 这个模块实现了类型级别的二进制数标准化处理&#xff0c;确保二进制数在组合时保持最简形式。 //! 二进制数字标准化模块 //! //! 提供二进制数字(B<H, L>)的组合前标准化功能&#xff0c;确保数字以最简形式表示&#xff0c; //! 避免同一数值有不同表示形式。…

解决OpenHarmony中找不到pthread_cancel和pthread_setcanceltype等libc符号的问题

笔者在移植三方库到OpenHarmony时遇到了pthread_cancel和pthread_setcanceltype函数找不到的问题&#xff0c;将解决办法分享如下&#xff1a; OpenHarmony的使用的c库musl中注释了这些函数的导出&#xff0c;在third_party/musl/libc.map.txt将屏蔽的函数中取消注释即可

Python编程进阶知识之第五课处理数据(matplotlib)

简介matplotlib 是 Python 中最流行的数据可视化库之一&#xff0c;它可以创建各种高质量的图表。无论是简单的折线图&#xff0c;还是复杂的 3D 图形&#xff0c;matplotlib 都能轻松应对。它提供了类似 MATLAB 的绘图接口&#xff0c;使得用户可以非常方便地进行图表的创建和…

rust-所有权

什么是所有权 所有权是一组规则&#xff0c;它决定了 Rust 程序如何管理内存。所有运行中的程序都必须管理它们对计算机内存的使用方式。某些语言使用垃圾回收&#xff08;GC&#xff09;&#xff0c;在程序运行时定期查找不再使用的内存&#xff1b;另一些语言则要求程序员显式…

破解哈希极化:基于主动路径规划的智算网络负载均衡方案

如今人工智能&#xff08;AI&#xff09;和大模型训练的蓬勃发展&#xff0c;大规模AI算力集群&#xff08;智算集群&#xff09;已成为关键基础设施。这类集群对网络性能&#xff0c;特别是高吞吐、低延迟和无损特性有着严苛要求&#xff0c;RoCE因此被广泛应用。然而&#xf…

Vue工程化 ElementPlus

一、Vue工程化1、环境准备create-vue是Vue官方提供的最新的脚手架工具&#xff0c;用于快速生成一个工程化的Vue项目。提供了以下功能&#xff1a;统一的目录结构本地调试热部署单元测试集成打包上线依赖环境&#xff1a;Node JS 是一个免费、开源、跨平台的JavaScript运行时环…

深入解析TCP:可靠传输的核心机制与实现逻辑

Linux 系列 文章目录Linux 系列前言一、TCP协议的概念1.1 TCP协议的特点1.2 TCP又叫做传输控制协议二、TCP协议段格式2.1、TCP的流量控制----------窗口大小&#xff08;16位&#xff09;2.2 TCP的确认应答机制2.2.1 什么是确认应答机制2.2.2 确认应答机制的优化2.3 超时重传机…

通缩浪潮中的 “测量防线”:新启航如何用国产 3D 白光干涉仪筑牢半导体成本护城河?

一、通缩浪潮下半导体行业的成本困局在通缩浪潮冲击下&#xff0c;半导体行业面临市场需求疲软、产品价格下滑的严峻挑战。为维持竞争力&#xff0c;降低生产成本成为企业生存发展的关键。而 3D 白光干涉仪作为半导体晶圆检测、制程监控的核心设备&#xff0c;传统进口产品价格…

[网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册

&#x1f31f;想了解其它网安工具&#xff1f;看看这个&#xff1a;[网安工具] 网络安全工具管理 —— 工具仓库 管理手册 D盾防火墙D盾,D盾_防火墙,D盾_IIS防火墙,D盾_web查杀,IIS防火墙,webshell查杀,https://www.d99net.net/ 0x01&#xff1a;D 盾 —— 工具简介 D 盾防火…

Spring AI 系列之二十二 - ImageModel

之前做个几个大模型的应用&#xff0c;都是使用Python语言&#xff0c;后来有一个项目使用了Java&#xff0c;并使用了Spring AI框架。随着Spring AI不断地完善&#xff0c;最近它发布了1.0正式版&#xff0c;意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

Redis集群高可用与性能优化实战指南

Redis集群高可用与性能优化实战指南 一、业务场景描述 在大型分布式系统中&#xff0c;Redis不仅承担缓存职责&#xff0c;还常用于限流、排行榜、会话管理等高并发场景。随着访问量的激增和集群规模的扩展&#xff0c;如何保证Redis服务的高可用性与高性能&#xff0c;成为后端…