当前位置: 首页 > news >正文

numpy常用函数详解

在深度神经网络代码中经常用到numpy库的一些函数,很多看过之后很容易忘记,本文对经常使用的函数进行归纳总结。

np.arange

arange是numpy一个常用的函数,该函数主要用于创建等差数列。它的使用方法如下所示:

numpy.arange([start,] stop[, step])

参数说明:

  • start:起始值,默认为0
  • stop:结束值(不包含),左闭右开
  • step:步长(可选,默认为1)

注意该函数返回值类型为“<class 'numpy.ndarray'>”

基础用法

import numpy as np# 1. 只有一个参数(终点)
a = np.arange(5)
print(a)  # [0 1 2 3 4]
print(type(a))  #<class 'numpy.ndarray'> 返回类型# 2. 指定起点和终点
b = np.arange(2, 6)
print(b)  # [2 3 4 5]# 3. 指定起点、终点和步长
c = np.arange(0, 10, 2)
print(c)  # [0 2 4 6 8]# 4. 负步长
d = np.arange(5, -1, -1)
print(d)  # [5 4 3 2 1 0]

另外arange也支持浮点数步长,请看下面的例子

import numpy as npa = np.arange(1,2,0.2)
print(a)  #[1.0,1.2,1.4,1.6,1.8]

np.array

这是numpy最基础也是最重要的数据结构。array函数创建序列需要从列表或者元组进行创建,这一点是与arange不相同的。

基础用法

import numpy as np# 1. 从列表创建
arr1 = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr1)# 2. 从嵌套列表创建多维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", arr2)# 3. 指定数据类型
arr3 = np.array([1, 2, 3], dtype=float)
print("浮点数数组:", arr3)# 4. 从元组创建
arr4 = np.array((1, 2, 3))
print("从元组创建:", arr4)

 数组属性

import numpy as npdef array_properties():arr = np.array([[1, 2, 3], [4, 5, 6]])print("维度:", arr.ndim)          # 2print("形状:", arr.shape)         # (2, 3)print("大小:", arr.size)          # 6print("数据类型:", arr.dtype)     # int64print("每个元素的字节数:", arr.itemsize)print("总字节数:", arr.nbytes)print("数据存储顺序:", arr.flags)

常见的数组操作

import numpy as np# 1. 基本操作
def basic_operations():arr = np.array([[1, 2, 3], [4, 5, 6]])# 重塑reshaped = arr.reshape(3, 2)print("重塑后:\n", reshaped)# 转置transposed = arr.Tprint("转置后:\n", transposed)# 展平flattened = arr.flatten()print("展平后:", flattened)# 2. 数组切片
def array_slicing():arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])# 基本切片print("前两行:\n", arr[:2])print("第二列:", arr[:, 1])print("子矩阵:\n", arr[1:3, 1:3])# 高级索引indices = np.array([0, 2])print("选择行:", arr[indices])# 布尔索引mask = arr > 5print("大于5的元素:", arr[mask])

数组广播

import numpy as npdef broadcasting_examples():# 1. 标量广播arr = np.array([[1, 2, 3], [4, 5, 6]])print("加标量:\n", arr + 1)# 2. 数组广播row = np.array([1, 2, 3])print("加行向量:\n", arr + row)col = np.array([[1], [2]])print("加列向量:\n", arr + col)# 3. 广播规则示例a = np.array([[1, 2, 3], [4, 5, 6]])  # shape: (2, 3)b = np.array([10, 20, 30])            # shape: (3,)print("广播结果:\n", a + b)broadcasting_examples()
#输出
加标量:[[2 3 4][5 6 7]]
加行向量:[[2 4 6][5 7 9]]
加列向量:[[2 3 4][6 7 8]]
广播结果:[[11 22 33][14 25 36]]

视图和副本

def views_and_copies():arr = np.array([[1, 2, 3], [4, 5, 6]])# 视图view = arr.view()view[0, 0] = 99print("原数组被修改:\n", arr)# 副本copy = arr.copy()copy[0, 0] = 88print("原数组未被修改:\n", arr)#输出
视图: [[1 2 3][4 5 6]]
原数组被修改:[[99  2  3][ 4  5  6]]
原数组未被修改:[[99  2  3][ 4  5  6]]

view() 创建一个数组视图,它与原数组共享相同的数据,但可以有不同的形状或数据类型。关键点是:

  • 视图是共享数据的新数组对象
  • 修改视图中的数据会影响原数组
  • 视图的形状改变不影响原数组

 看看下面的例子:

import numpy as npdef dtype_views():# 1. 创建整数数组arr = np.array([1, 2, 3, 4], dtype=np.int32)# 2. 创建float类型的视图view_float = arr.view(np.float32)print("原数组:", arr)print("原数组类型:", arr.dtype)print("原数组id:",id(arr))print("视图:", view_float)print("视图类型:", view_float.dtype)print("原数组id:",id(view_float))
dtype_views()#输出
原数组: [1 2 3 4]
原数组类型: int32
原数组id: 136153673669328
视图: [1.e-45 3.e-45 4.e-45 6.e-45]
视图类型: float32
原数组id: 136153673387632

通过上面的结果可以看到,view方法返回的对象与原数组的对象id是不同的,但是他们的实际数据是存储在同一个位置的所以修改view,原数组也会修改。这里就不在深入介绍了。

结论:

  • 视图不复制数据,只创建新的数组对象
  • 视图创建了新的数组对象,但指向相同的数据

实际应用场景

import numpy as np# 1. 数据类型转换而不复制
def efficient_type_conversion():# 创建大数组arr = np.arange(1000000, dtype=np.int32)# 使用视图转换类型(高效)float_view = arr.view(np.float32)# 对比复制方式float_copy = arr.astype(np.float32)print("视图是否共享内存:", np.shares_memory(arr, float_view))print("副本是否共享内存:", np.shares_memory(arr, float_copy))# 2. 图像处理中的应用
def image_processing():# 创建模拟图像数据img = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]], dtype=np.uint8)# 创建展平视图进行处理flat_view = img.view()flat_view.shape = (-1,)# 处理数据flat_view += 10print("处理后的图像:\n", img)

np.where

这是一个非常强大的函数,它的主要作用:

  1. 条件查找:返回满足条件的元素索引
  2. 条件选择:根据条件从两个数组中选择元素

条件查找

import numpy as npdef basic_where:arr = np.array([1, 2, 3, 4, 5, 4, 3, 2, 1])  #array创建序列需要基于列表创建#找出所有大于3的索引和对应的值indices = np.where(arr > 3)print(f'索引:{indices}')print(f'对应的值:{arr[indices]}')# 找出所有偶数的索引even_indices = np.where(arr % 2 == 0)print(f"偶数索引: {even_indices}")print(f"偶数值: {arr[even_indices]}")#多维数组示例arr_2d = np.array([[1,2,3],[4,5,6],[7,8,9]])rows, cols= np.where(arr_2d > 5)print("行索引:", rows)  #行索引: [1 2 2 2]print("列索引:", cols)  #列索引: [2 0 1 2]print("对应的值:", arr_2d[rows, cols]) #对应的值: [6 7 8 9]result = np.where(arr_2d > 5)print("结果:",result)  #行索引: (array([1, 2, 2, 2]), array([2, 0, 1, 2]))

由此可见,np.where对于二维数组或多维数组进行条件检查,返回的是各个维度索引的组成的元组。

条件选择

import numpy as np# 基本条件选择
def conditional_selection():arr = np.array([1, 2, 3, 4, 5])# 根据条件选择值:# where(condition, x, y) # 当condition为True时选择x,为False时选择yresult = np.where(arr > 3, arr, -1)print(result)  # [-1 -1 -1  4  5]# 使用数组作为替换值result2 = np.where(arr % 2 == 0, arr * 2, arr * 3)print(result2)  # [3 4 9 8 15]# 多维数组条件选择
def multidim_conditional():arr_2d = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 将大于5的元素替换为100result = np.where(arr_2d > 5, 100, arr_2d)print(result)  #[[  1   2   3]# [  4   5 100]#[100 100 100]]

np.linspace

相关文章:

numpy常用函数详解

在深度神经网络代码中经常用到numpy库的一些函数&#xff0c;很多看过之后很容易忘记&#xff0c;本文对经常使用的函数进行归纳总结。 np.arange arange是numpy一个常用的函数&#xff0c;该函数主要用于创建等差数列。它的使用方法如下所示&#xff1a; numpy.arange([star…...

deepseek 3FS编译

3FS在ubuntu22.04下的编译&#xff08;记录下编译过程&#xff0c;方便后续使用&#xff09; 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...

【CXX】6.2 str — rust::Str

Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8&#xff0c;抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...

制作三维软件学习路线

制作三维软件是一项复杂而富有挑战性的任务&#xff0c;涉及多个领域的知识。下面是一个建议的学习路线&#xff0c;涵盖从基础到高级的知识和技能。你可以根据自己的背景和兴趣进行调整。 ### 1. 编程基础 - **学习编程语言**&#xff1a;C或Python是常用的语言&#xff0c;了…...

【RabbitMQ】事务

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…...

常见的交换机端口类型

在计算机网络中&#xff0c;Access端口 和 Trunk端口 是两种常见的交换机端口类型&#xff0c;主要用于VLAN&#xff08;虚拟局域网&#xff09;的配置。它们的主要区别在于如何处理VLAN标签和数据帧。 1. Access端口 Access端口通常用于连接终端设备&#xff08;如PC、打印机…...

Linux Shell 脚本编程极简入门指南

一、学习前提准备 ✅ 环境要求&#xff1a; Linux系统&#xff08;Ubuntu/CentOS等&#xff09;或 WSL (Windows用户) 任意文本编辑器&#xff08;推荐VSCode/Vim&#xff09; 基础命令行操作能力 &#x1f50d; 验证环境&#xff1a; # 查看系统默认Shell echo $SHELL #…...

【医院管理会计专题】7.解锁本量利分析:医院医疗服务决策的智慧密码

医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院管理面临着诸多挑战,如何实现高效运营、提升服务质量并控制成本成为关键问题。管理会计作为一种重要的管理工具,在医院管理中发挥着越来越重要的作用。本…...

Kotlin和Java区别

哈哈哈&#xff0c;前段时间&#xff0c;面试的时候&#xff0c;突然问到我Kotlin和Java的区别&#xff0c;一下子把我问懵逼了&#xff0c;确实没遇到问这个的&#xff0c;想了下&#xff0c;说了下Kotlin的编译时空检查机制&#xff0c;代码更简洁&#xff0c;很多封装好的AP…...

Taro 面试题

基础概念 1. Taro 是什么&#xff1f;它的核心特点有哪些&#xff1f; Taro 是京东开源的 多端统一开发框架&#xff0c;基于 React 语法&#xff0c;可编译到 微信小程序、H5、React Native 等多个端。 核心特点&#xff1a; 多端适配&#xff1a;一套代码运行多个端支持 …...

Java部署在window启动报unable tocreate tempdir

在Windows系统中&#xff0c;Java应用在运行时会试图在默认的临时目录中创建文件。该临时目录通常由系统环境变量TEMP或TMP指定。如果这些变量设置不正确、指向一个无效的路径&#xff0c;或者操作系统的权限不足&#xff0c;就会导致“Unable to create tempdir”错误。 解决…...

基于deepseek和开放题库,构建专业大模型微调在线答题系统

为什么要进行大模型微调 大模型微调是将预训练模型适配到特定任务或领域的关键技术&#xff0c;正常情况下大模型通过海量通用数据训练获得广泛知识&#xff0c;但其参数和表征空间面向通用场景&#xff0c;难以直接适配垂直领域或复杂任务。例如在通用医疗问答模型在具体病症诊…...

ios 小组件和数据共享

创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件&#xff0c;可以进行多个小组件的调试 TestWidget2文件是主要操作&#xff0c;小组件使用swiftUI布局&#xff0c;使用 AppIntent进行事件处理&#xff…...

LVTTL(Low Voltage Transistor-Transistor Logic)电平详解

一、LVTTL电平的定义与核心特性 LVTTL&#xff08;低压晶体管-晶体管逻辑&#xff09;是传统TTL&#xff08;5V&#xff09;的低电压版本&#xff0c;工作电压通常为3.3V&#xff0c;旨在降低功耗并适配现代低电压集成电路&#xff0c;同时保持与TTL的逻辑兼容性。其核心特点如…...

element tree树形结构默认展开全部

背景&#xff1a; el-tree树形结构&#xff0c;默认展开全部&#xff0c;使用属性default-expand-all【是否默认展开所有节点】&#xff1b;默认展开一级&#xff0c;设置default-expanded-keys【默认展开的节点的 key 的数组】属性值为数组。 因为我这里的数据第一级是四川【省…...

统计登录系统10秒内连续登录失败超过3次的用户

为防止暴力破解用户账号的行为&#xff0c;在输入账号和密码时一般都会限制用户尝试密码输出错误的次数&#xff0c;如果用户多次输错密码后&#xff0c;将在一段时间内锁定账号&#xff0c;常见的有银行类APP、个税App等应用&#xff0c;如下是用户账号密码输入错误的提示图&a…...

音视频软件工程师面试题

一、基础知识 编解码相关 H.264 和 H.265(HEVC)的主要区别是什么?视频编解码的基本流程是什么?关键技术有哪些?音频编解码(如 AAC、MP3、Opus)的区别和应用场景?什么是 B 帧、P 帧、I 帧?它们的作用是什么? 流媒体协议RTMP、HTTP-FLV、HLS、WebRTC 的区别和应用场景…...

架构师面试(十四):注册中心设计

问题 大家或多或少都接触过【注册中心】&#xff0c;对注册中心的基本功能&#xff0c;如&#xff1a;服务注册、服务发现、健康检查和变更通知 &#xff0c;肯定是耳熟能详的&#xff1b;那么大家对注册中心的架构设计是否了解呢&#xff1f; 如果让你负责设计一个分布式的注…...

ctf-web: php原生类利用 -- GHCTF Popppppp

源代码 <?php error_reporting(0); class CherryBlossom { public $fruit1; public $fruit2; public function __construct($a) {$this->fruit1 $a; } function __destruct() { echo $this->fruit1; } public function __toString() { $newFunc …...

「Unity3D」UGUI将元素固定在,距离屏幕边缘的某个比例,以及保持元素自身比例

在不同分辨率的屏幕下&#xff0c;UI元素按照自身像素大小&#xff0c;会发生位置与比例的变化&#xff0c;本文仅利用锚点&#xff08;Anchors&#xff09;使用&#xff0c;来实现UI元素&#xff0c;固定在某个比例距离的屏幕边缘。 首先&#xff0c;将元素的锚点设置为中心&…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...