AIGC基础工具-科学计算和数据处理的重要库NumPy(Numerical Python)简介

news2024/11/9 10:35:07

在这里插入图片描述

文章目录

      • 1. NumPy 的核心概念
        • 1.1 `ndarray`:多维数组对象
          • 示例代码
      • 2. NumPy 的数据类型 (`dtype`)
          • 示例代码
      • 3. NumPy 的数组创建方法
        • 3.1 使用 `array()` 创建数组
        • 3.2 使用 `zeros()` 和 `ones()`
        • 3.3 使用 `arange()` 和 `linspace()`
        • 3.4 使用 `random` 模块生成随机数组
      • 4. NumPy 数组操作
        • 4.1 数组切片和索引
        • 4.2 数组的形状变化
        • 4.3 数学运算
        • 4.4 数学函数
          • 示例代码
      • 5. NumPy 的线性代数功能
        • 5.1 矩阵乘法
        • 5.2 矩阵求逆
        • 5.3 特征值和特征向量
      • 6. NumPy 的广播机制
          • 示例代码
      • 7. NumPy 的高级操作
        • 7.1 数组排序
        • 7.2 集合操作
      • 8. NumPy 的性能优化
      • 9. NumPy 的应用领域

NumPy 是 Python 科学计算和数据处理的重要库之一,全称为 Numerical Python。它为多维数组(ndarray)和矩阵提供了支持,并且拥有大量高效的数学函数和操作。NumPy 是机器学习、深度学习和数据科学中的基础工具之一,也是其他库如 Pandas、SciPy、Matplotlib、TensorFlow 等的核心构件。

1. NumPy 的核心概念

1.1 ndarray:多维数组对象

NumPy 中最重要的对象是 ndarray,它是用于存储同类型数据的多维数组。与 Python 原生列表相比,ndarray 更加高效,特别是在处理大型数据集时。ndarray 具有以下重要属性:

  • ndim:数组的维度数(轴数)。
  • shape:数组的形状,返回一个元组,表示每个维度中元素的个数。
  • size:数组的元素总数。
  • dtype:数组中元素的数据类型。
  • itemsize:每个数组元素所占用的字节数。
示例代码
import numpy as np
# 创建一个 2x3 的 ndarray
arr = np.array([[1, 2, 3], [4, 5, 6]])

print("数组维度:", arr.ndim)
print("数组形状:", arr.shape)
print("数组元素总数:", arr.size)
print("数组数据类型:", arr.dtype)
print("每个元素占用的字节数:", arr.itemsize)

2. NumPy 的数据类型 (dtype)

NumPy 支持多种数据类型,比 Python 的内置数据类型更加丰富和细粒度。例如:

  • int8, int16, int32, int64:分别表示 8、16、32、64 位整数。
  • float16, float32, float64:表示 16、32、64 位浮点数。
  • complex64, complex128:分别表示 64 位、128 位的复数。

你可以在创建数组时指定数据类型,也可以通过 astype() 方法将数组转换为其他类型。

示例代码
arr_float = np.array([1.5, 2.5, 3.5], dtype=np.float32)
arr_int = arr_float.astype(np.int32)
print(arr_int)

3. NumPy 的数组创建方法

NumPy 提供了多种创建数组的方式,除了直接通过列表或元组,还可以通过函数生成特定形状、数值范围的数组。

3.1 使用 array() 创建数组

从 Python 列表、元组等数据结构直接转换为数组。

arr = np.array([1, 2, 3, 4])
3.2 使用 zeros()ones()

创建全 0 或全 1 的数组,常用于初始化数组。

zeros_array = np.zeros((3, 3))  # 3x3 的全 0 数组
ones_array = np.ones((2, 4))    # 2x4 的全 1 数组
3.3 使用 arange()linspace()
  • arange(start, stop, step):返回一个在指定范围内按步长生成的等差数组。
  • linspace(start, stop, num):返回一个在指定范围内生成的等间距的浮点数数组。
arr_range = np.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
arr_linspace = np.linspace(0, 1, 5)  # [0. , 0.25, 0.5, 0.75, 1. ]
3.4 使用 random 模块生成随机数组

NumPy 的 random 模块可以生成随机数数组,如服从正态分布的随机数或 0 到 1 之间的随机浮点数。

random_array = np.random.rand(3, 3)  # 3x3 的随机浮点数矩阵
normal_array = np.random.randn(3, 3)  # 3x3 的正态分布随机数矩阵

4. NumPy 数组操作

4.1 数组切片和索引

NumPy 支持类似 Python 列表的切片和索引操作,但可以对多维数组进行切片。

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[0, 2])  # 访问第一行第三个元素
print(arr[:, 1])  # 访问所有行的第二列
print(arr[1:3, :])  # 切片:获取第 2 行到第 3 行的所有列
4.2 数组的形状变化

使用 reshape() 可以改变数组的形状,但前提是总元素个数不变。ravel()flatten() 可以将数组展开为一维。

arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped = arr.reshape(3, 2)  # 变成 3 行 2 列
flattened = arr.ravel()  # 展平为一维数组
4.3 数学运算

NumPy 支持数组之间的元素级运算,如加法、减法、乘法和除法,运算速度非常快。

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

sum_arr = arr1 + arr2  # [5, 7, 9]
mul_arr = arr1 * arr2  # [4, 10, 18]
4.4 数学函数

NumPy 提供了大量数学函数,如:

  • np.sin()np.cos()np.tan():三角函数。
  • np.exp()np.log():指数和对数函数。
  • np.sqrt():开平方。
示例代码
arr = np.array([1, 4, 9])
sqrt_arr = np.sqrt(arr)  # [1. 2. 3.]

5. NumPy 的线性代数功能

NumPy 提供了丰富的线性代数功能,如矩阵乘法、求逆、特征值分解等。

5.1 矩阵乘法

NumPy 的 dot()@ 运算符可以执行矩阵乘法。

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])

result = np.dot(arr1, arr2)  # 或 arr1 @ arr2
5.2 矩阵求逆

使用 np.linalg.inv() 计算矩阵的逆。

matrix = np.array([[1, 2], [3, 4]])
inverse_matrix = np.linalg.inv(matrix)
5.3 特征值和特征向量

np.linalg.eig() 可以计算矩阵的特征值和特征向量。

matrix = np.array([[1, 2], [2, 1]])
eigenvalues, eigenvectors = np.linalg.eig(matrix)

6. NumPy 的广播机制

广播机制允许对不同形状的数组进行数学运算,NumPy 自动将小数组扩展为大数组的形状以适应运算。这使得编写代码更加简洁高效。

示例代码
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([1, 0, 1])

# 广播:arr2 自动扩展为 arr1 的形状
result = arr1 + arr2  # [[2, 2, 4], [5, 5, 7]]

7. NumPy 的高级操作

7.1 数组排序

NumPy 提供了 np.sort() 函数,可以对数组进行排序。

arr = np.array([3, 1, 2])
sorted_arr = np.sort(arr)  # [1, 2, 3]
7.2 集合操作

NumPy 还提供集合操作,如 np.unique() 用于去除重复元素。

arr = np.array([1, 2, 2, 3, 3])
unique_arr = np.unique(arr)  # [1, 2, 3]

8. NumPy 的性能优化

  • 内存效率ndarray 是连续内存块,减少了 Python 列表带来的额外开销。
  • **矢量化

操作**:NumPy 中的数组操作通常是矢量化的,基于底层 C 实现,避免了 Python 循环,极大提升性能。

9. NumPy 的应用领域

  • 数据分析与科学计算:如 Pandas 的底层数组计算依赖 NumPy。
  • 机器学习:作为深度学习框架(如 TensorFlow、PyTorch)的底层支持。
  • 图像处理:通过操作像素矩阵进行图像增强、滤波等。
  • 物理与工程仿真:用来模拟复杂的物理模型和工程系统。

通过 NumPy,你可以高效地进行各种科学计算与数据处理,它不仅简化了工作流程,还大大提升了计算的速度和效率,是 AI 和数据科学领域的基础工具。


结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

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

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

相关文章

AOT源码解析4.3-model主体解析

1.添加参考图像(add_reference_frame) 1.1 生成位置编码和ID编码 具体操作见详情。 图1:如图所示,显示的是参考图像的位置编码和id编码的生成过程。对于id编码,将mask图像输入进conv2d卷积网络后,进行结…

容器化安装Jenkins部署devops

基础环境介绍 系统使用的是centos7.9 内核使用的是5.16.13-1.el7.elrepo.x86_64 容器使用的是26.1.4 docker-compose使用的是 v2.29.0 链路图 devops 配置git环境插件 部署好jenkins后开始配置 jenkins连接git,这里需要jenkins有连接git的插件。在已安装的插件…

【SD教程】图片也能开口说话?别惊讶!用SadTalker插件,一键生成自己的数字人,本地部署,免费使用!(附资料)

最近数字人越来越火,连互联网大佬都纷纷下场,比如360的周鸿祎,京东的刘强东等等。小伙伴可能也想拥有自己的数字人如果想用最简单的方式,那么可以用第三方的网站,例如 HeyGen平台、腾讯的智影等等。可这些网站都是收费…

HFSS中看TDR波形详细设置以及相关的解释

时域反射测量(TDR)中心思想就是用阶跃函数作为激励,应用在模型上,并检查反射随时间的变化。在检查时域之前,必须对driven solution(Modal、Terminal或Transient)执行插值扫描。然后,…

vite分目录打包以及去掉默认的.gz 文件

1.vite打包情况介绍: 1.1vite在不进行任何配置的情况下,会将除开public的所有引用到资源打包编译添加哈希值至assets文件夹中(非引用文件以及行内样式图片未被打包编译资源会被treeSharp直接忽略不打包),     1.2w…

阿里云函数计算 x NVIDIA 加速企业 AI 应用落地

作者:付宇轩 前言 阿里云函数计算(Function Compute, FC)是一种无服务器(Serverless)计算服务,允许用户在无需管理底层基础设施的情况下,直接运行代码。与传统的计算架构相比,函数…

极星Polestar EDI 项目案例

近期国内汽车行业供应商J公司收到了极星Polestar的邀请,需要通过EDI与其国内工厂传输业务数据。本案例将为大家介绍对接过程以及实施方案。 梳理需求文档 极星Polestar的EDI需求与Volvo一样,传输协议选择 OFTP,报文标准为EDIFACT&#xff0…

Swing模拟银行柜台系统

> 这是一个基于JavaSwing实现的模拟银行柜台系统。 > 具有管理员、柜员、客户三种登录角色。 > 支持开户、注册、存取款、转账、汇款、账单查询等功能。 > 本项目适合JAVA初学者作为入门学习项目。 一、部分界面演示 二、基础依赖 技术/框架版本描述Java11编…

Vue前端浏览器指纹获取:数字世界的身份密码

程序员必备宝典https://tmxkj.top/#/一个开源的JavaScript库,它通过收集用户浏览器的多种属性(如屏幕分辨率、浏览器插件、字体、Canvas和WebGL等)来生成一个独特的浏览器指纹,用于识别和追踪用户。 #Github地址 GitHub - finger…

Uniapp时间戳转时间显示/时间格式

使用uview2 time 时间格式 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 <text class"cell-tit clamp1">{{item.create_time}} --- {{ $u.timeFormat(item.create_time, yyyy-mm-dd hh:MM:ss)}} </text>

apply、call和bind的作用和区别

apply与call 首先介绍一下apply与call&#xff0c;因为这两个方法的功能和使用方式都差不多&#xff0c;只是传参的方式不同。call和apply的作用都是改变函数运行时的上下文&#xff08;context&#xff09; 语法 fun.call(thisArg, arg1, arg2, ...)fun.apply(thisArg, arg…

类的难疑点

一、知识点 1、类的属性和对象属性&#xff08;实例属性&#xff09; shuxing"123" self.shuxing"123" 2、类的对象 self.loginMyclass() loginMyclass() 3、访问类属性和方法的操作 通过“类名.属性”访问&#xff1a;Myclass.shuxing 通…

详解常见排序

目录 ​编辑 插入排序 希尔排序&#xff08;缩小增量排序&#xff09; 选择排序 冒泡排序 堆排序 快速排序 hoare版 挖坑法 前后指针法 非递归版 归并排序 递归版 非递归版 计数排序 声明&#xff1a;以下排序代码由Java实现&#xff01;&#xff01;&#xff01…

【研赛D题成品论文】24华为杯数学建模研赛D题成品论文(第一问)+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛D题精品成品论文已出&#xff01; D题 大数据驱动的地理综合问题 一、问题分析 问题一&#xff1a;目标&#xff1a;利用1990-2020年的数据&#xff0c;针对降水量和土地利用的时空演化特征进行描述。数据&#xff1a;两个核心变量&#xff0c;一…

电商效果图渲染神器:轻松高效出图

在这个电商行业飞速发展的今天&#xff0c;离不开商品图的效果。而电商效果图同样离不开渲染&#xff0c;而大量的渲染需求有需要大量的机器&#xff0c;还要追求更快的渲染速度和更稳定的性能。毕竟&#xff0c;谁不想快点完成项目又省心呢&#xff1f; 而云渲染服务是个很好…

C++之STL—deque容器

双端数组 区别于 vector (单端数组)&#xff0c; 构造函数 注意&#xff1a;读取数据时&#xff0c;const修饰保证函数内只能读取&#xff0c;不能修改数据 void print(const deque<int>& deq) {for (deque<int>::const iterator it deq.begin(); it ! deq.e…

使用 Nuxt Kit 的构建器 API 来扩展配置

title: 使用 Nuxt Kit 的构建器 API 来扩展配置 date: 2024/9/24 updated: 2024/9/24 author: cmdragon excerpt: 摘要:本文详细介绍了如何使用 Nuxt Kit 的构建器 API 来扩展和定制 Nuxt 3 项目的 webpack 和 Vite 构建配置,包括扩展Webpack和Vite配置、添加自定义插件、…

正向科技|格雷母线定位系统的设备接线安装示范

格雷母线安装规范又来了&#xff0c;这次是设备接线步骤 格雷母线是格雷母线定位系统的核心部件&#xff0c;沿着移动机车轨道方向上铺设&#xff0c;格雷母线以相互靠近的扁平状电缆与天线箱电磁偶合来进行信号传递&#xff0c;从而检测得到天线箱在格雷母线长度方向上的位置。…

OpenLayers 开源的Web GIS引擎 - 添加地图控件地图控件

中心点按钮、地图放大缩小滑块、全图和比例尺控件 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…