当前位置: 首页 > 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;将元素的锚点设置为中心&…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...