torch中fft和ifft新旧版本使用

news2024/11/18 5:31:54

pytorch旧版本(1.7之前)中有一个函数torch.rfft(),但是新版本(1.8、1.9)中被移除了,添加了torch.fft.rfft(),但它并不是旧版的替代品。

torch.fft

label_fft1 = torch.rfft(label_img4, signal_ndim=2, normalized=False, onesided=False)

参数说明:
input (Tensor) – the input tensor of at least signal_ndim dimensions(输入数据)
signal_ndim (int) – the number of dimensions in each signal. signal_ndim can only be 1, 2 or 3(输入数据的维度)
normalized (bool, optional) – controls whether to return normalized results. Default: False(是否进行归一化处理)
onesided (bool, optional) – controls whether to return half of results to avoid redundancy. Default: True(fft后因共轭对称,返回一半的数据长度)

在1.7版本torch.rfft中,有一个warning,表示在新版中,要“one-side ouput”的话用torch.fft.rfft(),要“two-side ouput”的话用torch.fft.fft()。这里的one/two side,跟旧版的onesided参数对应。
在这里插入图片描述
在这里插入图片描述

新版pytorch中,各种在新版本中各种fft的解释如下:
fft, which computes a complex FFT over a single dimension, and ifft, its inverse
the more general fftn and ifftn, which support multiple dimensions
The “real” FFT functions, rfft, irfft, rfftn, irfftn, designed to work with signals that are real-valued in their time domains
The “Hermitian” FFT functions, hfft and ihfft, designed to work with signals that are real-valued in their frequency domains
Helper functions, like fftfreq, rfftfreq, fftshift, ifftshift, that make it easier to manipulate signals
上述描述中:
fft和ifft就是计算单维的复数FFT,fftn和ifftn计算多维的复数FFT
rfft、irfft、rfftn、irfftn计算实数FFT

在这里插入图片描述

对于ifft,需要注意的是, 新版中要求输入的数据类型为complex,即要求输入的维度不跟旧版一样将复数的实部和虚部存成二维向量(即在最后多出一个值为2的维度)。如果说输入时以二维向量存复数,则需要使用torch.complex()将其转化成complex类型。

import torch
input = torch.randn(1, 3, 64, 64)
### 旧版 ###
# 参数normalized对这篇文章的结论没有影响,加上只是为了跟文章开头同步
# 时域=>频域
output_fft_old = torch.rfft(input, signal_ndim=2, normalized=False, onesided=False)
# 频域=>时域
output_ifft_old = torch.irfft(output_fft_old , signal_ndim=2, normalized=False, onesided=False)

### 新版 ###
# 时域=>频域
output_fft_new = torch.fft.fft2(input, dim=(-2, -1))
output_fft_new_2dim = torch.stack((output_fft_new.real, output_fft_new.imag), -1)  # 根据需求将复数形式转成数组形式
# 频域=>时域
output_ifft_new = torch.fft.ifft2(output_fft_new, dim=(-2, -1))                   # 输入为复数形式
output_ifft_new = torch.fft.ifft2(torch.complex(output_fft_new_2dim[..., 0],      # 输入为数组形式
                                                output_fft_new_2dim[..., 1]), dim=(-2, -1))    
# 注意最后输出的结果还是为复数,需要将虚部丢弃
output_ifft_new = output_ifft_new.real
print((output_ifft_new - input).sum())   # 输出应该趋近于0(因为存在数值误差)

在这里插入图片描述
在这里插入图片描述
注意函数中的参数,新版的dim是要进行FFT的第几维度,一般是最后一维。

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

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

相关文章

25岁走出外包后,感到迷茫了.....

我认识一个老哥,他前段时间从外包出来了,他在外包干了3年左右的点工,可能也是自身的原因,也没有想到提升自己的技术水平,后面觉得快废了,待着没意思就出来了,出来后他自己更迷茫了,本…

Linux安装Jenkins搭配Gitee自动化部署Springboot项目

目录 前言一、环境准备二、全局工具配置jdk、maven、git三、配置Gitee四、新建任务-部署Springboot项目 前言 Jenkins是一款流行的开源持续集成(CI)和持续交付(CD)工具。它可以帮助开发人员自动构建、测试和部署软件应用程序&…

广州蓝景分享—快速了解Typescript 5.0 中重要的新功能

作为一种在开发人员中越来越受欢迎的编程语言,TypeScript 不断发展,带来了大量的改进和新功能。在本文中,我们将深入研究 TypeScript 的最新迭代版本 5.0,并探索其最值得注意的更新。 1.装饰器 TypeScript 5.0 引入了改进的装饰…

二、SQLServer 的适配记录

SQLServer 适配记录 说明:由于 SQLSERVER 数据库本身和MYSQL数据库有一定的语法,创表结构,物理模式等差别,在适配过程中,可能会出现各种错误情况,可参考本次适配记录。 当前环境: 适配项目:JDK11,SpringBoot服务。 适配数据库:SELECT @@VERSION,得 Microsoft SQL …

ProtocolBuffer入门和使用

<<<<<<< HEAD 基础 入门 优势 protocol buffer主要用于结构化数据串行化的灵活、高效、自动的方法&#xff08;简单来说就是结构化数据的可串行化传输&#xff0c;类似JSON、XML等&#xff09;。 比XML解析更快&#xff1a;解析的层数更少&#xff0c;…

【技术发烧】MySqlServer,MySQL WorkBench安装详细教程

目录 一.下载安装MySQLSever 1.下载 2.安装 1.解压 2.编写配置文件 二.初始化数据库 1.以管理员身份打开命令提示符 2.初始化数据库 3.安装mysql服务并启动 4.连接MySQL 5. 修改密码 三.MySQL WorkBench下载 一.下载安装MySQLSever 1.下载 下载路径&#xff1a;https:/…

java导入导出excel数据图片合成工具

目录 java导出和导入excel数据java读取excel数据java数据导出成excel表格 java服务端图片合成的工具 java导出和导入excel数据 可以使用hutool的ExcelUtil工具。 在项目中加入以下依赖&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactI…

【计算机基础】绝对路径和相对路径

目录 一.绝对路径 二.相对路径 例如 三.举例 一.绝对路径 绝对路径是指从根目录开始的完整路径&#xff0c;包括所有父目录的路径&#xff0c;直到目标文件或者目录 所在的位置。 全文件名全路径文件名绝对路经完整的路径 例如&#xff0c;在windows系统中&#xff0c;绝…

《Linux基础》09. Shell 编程

Shell 编程 1&#xff1a;Shell 简介2&#xff1a;Shell 脚本2.1&#xff1a;规则与语法2.2&#xff1a;执行方式2.3&#xff1a;第一个 Shell 脚本 3&#xff1a;变量3.1&#xff1a;系统变量3.2&#xff1a;用户自定义变量3.2.1&#xff1a;规则3.2.2&#xff1a;基本语法3.2…

Python自动发送消息小脚本,可用于各种聊天框~

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect 个…

安装k3s

k3s官方文档 architecture quick start 概述&#xff1a;k3s一个轻量级的kubernetes,因资源消耗知识kubernetes的一半&#xff0c;故取名k3s k3s的node分为 server node 和agent node: server node: 可以运行kubectl等命令&#xff0c;且包含 agent node的功能。agent node:…

【升级】专为小白设计的TypeScript入门课无密拟把疏狂图一醉

TypeScript&#xff1a;JavaScript的超集&#xff0c;提高代码可靠性和可维护性 【升级】专为小白设计的TypeScript入门课 download&#xff1a;https://www.666xit.com/3817/ 随着现代Web应用程序的复杂性增加&#xff0c;使用JavaScript编写大型项目变得越来越困难。TypeS…

Centos 安装MySQL

CentOS 安装 MySQL 1. 安装 VMware 以及 CentOS2. 安装 docker2.1 卸载&#xff08;可选&#xff09;2.2 安装 Docker2.3 启动 Docker2.4.配置镜像加速2.5 设置 Docker 开机自启 3. 安装 MySQL3.1 从docker镜像仓库中拉取mysql镜像3.2 创建实例&#xff0c;并启动3.3.查看docke…

20230422 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142. 环形链表 II

1、24. 两两交换链表中的节点 初始时&#xff0c;cur指向虚拟头结点&#xff0c;然后进行如下三步&#xff1a; 操作之后&#xff0c;链表如下&#xff1a; 看这个可能就更直观一些了&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* i…

camunda流程引擎send task节点用途

Camunda的Send Task用于向外部系统或服务发送消息。消息可以是同步或异步的&#xff0c;可以发送到队列、主题或其他类型的消息中间件。Send Task通常用于将消息发送到外部系统&#xff0c;而无需等待响应或结果。相反&#xff0c;它只是向外部系统发出信号&#xff0c;通知其执…

使用Storm proxies动态代理IP如何正确设置使用海外IP代理?

正确设置使用海外IP代理需要以下几个步骤&#xff1a; 获取代理服务器的IP地址和端口号&#xff1a;可以在代理服务提供商的网站上或者代理IP池中获取相应的信息。在计算机或移动设备上配置代理服务器&#xff1a;打开网络设置&#xff0c;找到代理服务器的设置选项&#xff0c…

10. 并查集

10. 并查集 并查集是一种树型的数据结构 &#xff0c;并查集可以高效地进行如下操作&#xff1a; 查询元素p和元素q是否属于同一组 合并元素p和元素q所在的组 10.1 并查集结构 并查集也是一种树型结构&#xff0c;但这棵树跟我们之前讲的二叉树、红黑树、B树等都不一样&…

项目风险管理的5个重点 不得不重视

风险管理持续贯穿软件项目的整个生命周期&#xff0c;其对项目的影响非常大&#xff0c;那么如何高效管理项目风险&#xff1f;5个风险管理重点如下&#xff1a; 1、风险识别和科学分析 需要对风险发生的可能性进行分析&#xff0c;判断风险对项目影响可能性并记录其特征&#…

【 初识 Spring MyBatis 查询数据库 】

文章目录 一、概念二、为什么学 MyBatis三、怎么学 MyBatis四、第⼀个MyBatis查询4.1 MyBatis 在整个框架中的定位4.2 准备&#xff1a;创建库和表4.3 配置 MyBatis 开发环境4.3.1 添加MyBatis框架⽀持4.3.1.1 ⽼项⽬添加支持扩展&#xff1a;在⽼项⽬中快速添加框架 - EditSta…

ChatGPT 速通手册——不同相似度算法的分值介绍

不同相似度算法的分值介绍 在信息大暴涨的今天&#xff0c;人类已经不可能出现通才、全才式的人物。利用 ChatGPT 来询问我们未知领域的知识是很好的习惯和用法。但对严肃知识的学习&#xff0c;一定要通过权威来源复核审校&#xff0c;保证自己所学知识的正确。否则&#xff…