FFT算法实践报告

FFT基本原理

代码链接: link.

DFT

在讨论FFT之前,我们需要先了解以下DFT。所谓的DFT其实就是两个矩阵做点乘。
多项式可以有两种表示方法,一种是系数表示法,另一种是点值表示法。
这两种表示法之间是可以转换的,系数表示法到点值表示法非常简单,就是随便取几个点带入求值,而点值表示法到系数表示法就需要用到插值法,关于插值法又不在本文的讨论范围之内了。
所谓的点值表示法,设A(x)是一个n阶的多项式,那么至少可以用n+1对(x0,A(x0)),(x1,A(x1))…这样的点对来表示,也就是说确定了这n+1个点,就可以唯一的确定一个多项式,形如a0+a1x+a2x²+…这种。证明的方法利用到了幼儿园级别的线性代数知识。
当两个多项式相乘时,我们可以很自然的想到将对应的点值相乘,这样就得到了结果的点值表示法。
假设现在有两个n阶的多项式相乘,那么利用点值表示法,我们需要将对应的n个点分别相乘,也就是要做n*n次乘法运算,这个时间复杂度是O(n²),与我们直接将系数表示下的多项式相乘复杂度一致。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WRL2KX6n-1636098095675)(imgs/2021-11-05-13-49-37.png)]

这已经是离散傅里叶变化的思想了。
所谓离散傅里叶变换就是
在这里插入图片描述

其本质就是M矩阵和X向量做点乘。

FFT

我们想要找到突破口就需要在将多项式转化为点值表示这一步做一点小操作。这一点操作就是利用对称性,减少计算量。
我们注意到一个n阶多项式A(x) = a0+a1x²+a2x³+…其奇数项是奇函数,偶数项是偶函数。而奇数项又可以分离成x乘一个偶函数。
因此,我们利用偶函数的性质可以减少很多计算量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9kKw3rA-1636098095677)(imgs/2021-11-05-14-57-27.png)]

比方现在有一个多项式x+x²+x³,那么我们应该至少需要4对点才可以求得该多项式的点值表示法,我可以找x1,x2,-x1,-x2这样的正负对,所以只需要找2对即可,因为另一半的值就无非就是符号不同。
但是只是这样的一次对称只能减少一半的计算量,只能让原本O(n²)的算法变为O(n²/2),其提升不是很大。如果可以一直利用这种对称性就好了,这种对称性建立的前提是正负对的存在,但是显然在实数域我们无法做到这一点,所以必须要在复数域讨论。
所以Fourier提出,对于一个n-1阶的多项式,我们不妨直接用n个复数w0,w1,w2…wn代替原来的x0,x1,x2…xn,这样得到一种特殊的点值表示法就是被成为离散傅里叶变化(DFT)。而这n个复数不是随便选取的,而是在复平面将单位圆等分n分后对应的点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRol9XNK-1636098095678)(imgs/2021-11-05-14-29-04.png)]

单位根的性质复平面上的单位根有这样一个性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWgPl5Ge-1636098095678)(imgs/2021-11-05-14-42-24.png)]

于是正负对出现了。
我们的程序就可以按照这个框架来写了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrnFDez7-1636098095679)(imgs/2021-11-05-14-57-59.png)]

python实现

DFT

#DFT,本质就是两个矩阵相乘
def DFT(x):x = np.asarray(x,dtype=float)N = x.shape[0]M = [[j for i in range(N)]for j in range(N)]M = np.asarray(M,dtype=complex)w = np.exp(-2j*np.pi/N)for i in range(N):for j in range(N):M[i][j] = np.power(w,i*j)return np.dot(M,x)

FFT

递归

#递归FFT,利用分治思想的dft
def fft_recurrence(x):x = np.asarray(x,dtype=float)N = x.shape[0]if N<2:return DFT(x)x_even = fft_recurrence(x[0::2])x_odd = fft_recurrence(x[1::2])factor = np.exp(-2j * np.pi * np.arange(N) / N)return np.concatenate([x_even + factor[:int(N / 2)] * x_odd,x_even + factor[int(N / 2):] * x_odd])

非递归

上面那种FFT是最基础的,同时因为递归的原因执行速度很慢,所以提出了非递归的优化方法。
观察 n =4时候的子序列位置变换情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i3Taxv6P-1636098095679)(imgs/2021-11-05-15-11-31.png)]

我们发现子序列最终的位置其实就是初始位置的二进制翻转后结果,如3(11)变为了3(11),而1(01)变为了2(10)。

Java实现

Complex复数类

首先创建一个复数类,定义一系列的加减乘除操作。

package fft;public class Complex {private double realPart;private double imaginaryPart;public Complex() {this.realPart =0;this.imaginaryPart =0;}public Complex(double realPart,double imaginaryPart) {this.realPart = realPart;this.imaginaryPart = imaginaryPart;}/*** 加法运算* @param w* @return*/public Complex add(Complex w) {if (w ==null) {return new Complex();}return new Complex(this.realPart+w.getRealPart(),this.imaginaryPart+w.getImaginaryPart());}/*** 减法运算* @param w* @return*/public Complex subt(Complex w) {if (w ==null) {return new Complex();}return new Complex(this.realPart-w.getRealPart(),this.imaginaryPart-w.getImaginaryPart());}/***乘法 * @param w* @return*/public Complex mult(Complex w) {if (w ==null) {return new Complex();}return new Complex(this.realPart*w.getRealPart()-this.imaginaryPart*w.getImaginaryPart(),this.realPart*w.getImaginaryPart()+this.imaginaryPart*w.getRealPart());}/*** 除法* @param w* @return*/public Complex divide(Complex w) {if (w ==null) {return new Complex();}double W = w.getImaginaryPart()*w.getImaginaryPart() - w.getRealPart()*w.getRealPart();return new Complex((this.realPart*w.getRealPart()+this.imaginaryPart*w.getImaginaryPart())/W,(this.imaginaryPart*w.getRealPart()-this.realPart*w.getImaginaryPart())/W);}@Overridepublic String toString() {// TODO Auto-generated method stubString s = (this.imaginaryPart>=0)? "+":"";return this.realPart+s+this.imaginaryPart+"i";}/*** @return the realPart*/public double getRealPart() {return realPart;}/*** @param realPart the realPart to set*/public void setRealPart(double realPart) {this.realPart = realPart;}/*** @return the imaginaryPart*/public double getImaginaryPart() {return imaginaryPart;}/*** @param imaginaryPart the imaginaryPart to set*/public void setImaginaryPart(double imaginaryPart) {this.imaginaryPart = imaginaryPart;}}

Matrix复数矩阵类

Matrix类是一个复数矩阵类,定义了一系列我们要用到的矩阵操作

package fft;/**复数矩阵* @author zhangx**/
public class Matrix {/**** 对矩阵进行切片,只能切列向量* @param a* @param x1 begin* @param x2 end* @return*/public static Complex[][] subMatrix(Complex[][] a,int x1,int x2){int n = a.length;int m = a[0].length;int l = x2-x1;Complex[][] b = new Complex[l][m];for(int i =0;i<l;)for(int j =0;j<n;j++)if(j>=x1&&j<x2)b[i++] = a[j];return b;}/*** 矩阵切片升级版,可以切任意矩形形状* @param a* @param x1* @param x2* @param y1* @param y2* @return*/public static Complex[][] subMatrix(Complex[][] a,int x1,int x2,int y1,int y2){int n = a.length;int m = a[0].length;int l = x2-x1;int d = y2-y1;Complex[][] b = new Complex[l][d];for(int i =0;i<l;) {for(int k=0;k<n;k++) {if(k>=x1&&k<x2) {for(int j=0;j<d;) {for(int p =0;p<m;p++) {if(p>=y1&&p<y2) {b[i][j] = a[k][p];j++;}}}i++;}}}return b;}/**** 返回偶数序列* @param a* @return*/public static Complex[][] evenMatrix(Complex[][] a){int n =a.length;int m = a[0].length;int l = n/2;Complex[][] b = new Complex[l][m];for(int i =0;i<l;i++)b[i] = a[2*i];return b;}/**** 返回奇数序列* @param a* @return*/public static Complex[][] oddMatrix(Complex[][] a){int n =a.length;int m = a[0].length;int l = n/2;Complex[][] b = new Complex[l][m];for(int i =0;i<l;i++)b[i] = a[2*i+1];return b;}/*** 粘结矩阵* @param a* @param b* @return*/public static Complex[][] concatenate(Complex[][] a,Complex[][] b){int na = a.length;int ma = a[0].length;int nb = b.length;int mb = b[0].length;//维度不同不可以粘接if(ma!=mb)return null;Complex[][] c = new Complex[na+nb][ma];for(int i =0;i<c.length;i++)c[i] = (i>=na)? b[i-na]:a[i];return c;}/*** 打印矩阵* @param a*/public static void show(Complex[][] a) {for (int i =0;i<a.length;i++) {for (Complex j:a[i]) {System.out.print(j.toString()+" ");}System.out.println();}}/*** 矩阵相加* @param a* @param b* @return*/public static Complex[][] mAdd(Complex[][] a,Complex[][] b){int na = a.length;int ma = a[0].length;int nb = b.length;int mb = b[0].length;//维度不同不可想加if(na!=nb||ma!=mb)return null;Complex[][] c = new Complex[na][ma];for(int i =0;i<na;i++)for(int j =0;j<ma;j++) c[i][j] = a[i][j].add(b[i][j]);return c;}/*** 按位置相乘矩阵* @param a* @param b* @return*/public static Complex[][] lMult(Complex[][] a ,Complex[][] b){int n = a.length;int m =b.length;if(n!=m)return null;Complex[][] c = new Complex[n][a[0].length];for(int i =0;i<n;i++)for(int j=0;j<a[0].length;j++) {c[i][j] = a[i][j].mult(b[i][j]);}return c;}/*** 复数矩阵乘法* @param a* @param b* @return*/public static Complex[][] mMult(Complex[][] a,Complex[][] b) {//当a的列数与矩阵b的行数不相等时,不能进行点乘,返回nullif (a[0].length != b.length)return null;//c矩阵的行数y,与列数xint y = a.length;int x = b[0].length;Complex c[][] = new Complex[y][x];//初始化c矩阵for (int i =0;i<c.length;i++)for (int j=0;j<c[0].length;j++) {c[i][j] = new Complex(0,0);}//运算主体部分for (int i = 0; i < y; i++)for (int j = 0; j < x; j++)//c矩阵的第i行第j列所对应的数值,等于a矩阵的第i行分别乘以b矩阵的第j列之和for (int k = 0; k < b.length; k++)c[i][j] =c[i][j].add(a[i][k].mult(b[k][j]));return c;}public static void main(String[] args) {Complex[][] a =new Complex[4][3];Complex[][] b =new Complex[4][3];for (int i =0;i<a.length;i++)for (int j =0;j<a[0].length;j++) {a[i][j] = new Complex(i,j);}for (int i =0;i<b.length;i++)for (int j =0;j<b[0].length;j++) {b[i][j] = new Complex(i,0);}Complex[][] c = new Complex[a.length][b[0].length];for (int i =0;i<c.length;i++)for (int j=0;j<c[0].length;j++) {c[i][j] = new Complex(0,0);}
//		c = Matrix.subMatrix(a, 2, 4);
//		c = Matrix.oddMatrix(a);Matrix.show(a);Complex[][] d = Matrix.subMatrix(a, 1, 3, 1, 2);System.out.println();Matrix.show(d);//		c = Matrix.mMult(a, b);
//		
//		Matrix.show(a);
//		System.out.println();
//		Matrix.show(b);
//		System.out.println();
//		Matrix.show(c);}
}

FFT类

主要定义FFT递归版,以及DFT操作,因为我们要求的n必须是2的幂,所以如果给定的向量不满足,则会调用genArray()生成一个满足条件的向量将给定向量末尾补上0。

package fft;public class FFT {/*** 生成w* @param n* @param k* @return*/Complex omega(int n,int k) {return new Complex((Math.cos(2*Math.PI*k/n)),(-Math.sin(2*Math.PI*k/n)));}/*** 找到最小的比n大的2的幂* @param n* @return*/int genN(int n) {int s  =2;while(s<n) {s *=2;}return s;}/*** DFT* @param x* @return*/Complex[][] DFT(Complex[][] x) {int n = x.length;Complex[][] M = new Complex[n][n];for (int i=0;i<n;i++) {for (int j=0;j<n;j++) {M[i][j] = omega(n, i*j);}}return Matrix.mMult(M, x);}/*** FFT递归版本* @param x* @return*/Complex[][] FFT_recurrence(Complex[][] x){int n = x.length;if (n<32)return DFT(x);Complex[][] x_even = FFT_recurrence(Matrix.evenMatrix(x)); Complex[][] x_odd = FFT_recurrence(Matrix.oddMatrix(x));Complex[][] factor = new Complex[n][1];for(int i =0;i<n;i++)factor[i][0] = omega(n, i);Complex[][] a1 = Matrix.subMatrix(factor, 0, n/2);Complex[][] a2 = Matrix.subMatrix(factor, n/2, n);Complex[][] a3 = Matrix.lMult(a1, x_odd);Complex[][] a4 = Matrix.lMult(a2, x_odd);Complex[][] a5 = Matrix.mAdd(a3, x_even);Complex[][] a6 = Matrix.mAdd(a4, x_even);Complex[][] ret = Matrix.concatenate(a5, a6);return ret;}public Complex[][] genArray(Complex[][] x,int n) {int m = x.length;Complex[][] X = new Complex[n][1];for(int i =0;i<n;i++) {if(i<m) X[i][0] = x[i][0];elseX[i][0] = new Complex(0,0);}	return X;}}

测试类

package fft;/**用于测试以及展示用法* @author zhangx**/
public class Main {/*** @param args*/public static void main(String[] args) {int n = 1024;FFT fft = new FFT();//随机生成一个列向量,该向量的每一个元素都是随机的复数Complex[][] x = new Complex[n][1];for (int i =0;i<n;i++)x[i][0] = new Complex(Math.random()%10,Math.random()%10);//因为n可能不是2的幂,所以需要额外生成一个比n大的2次幂维度的向量,用于装xComplex[][] X = fft.genArray(x, fft.genN(n));System.out.println("Matrix X:");Matrix.show(X);System.out.println("************************************");//记录消耗时间long s1 = System.currentTimeMillis();X = fft.FFT_recurrence(X);long s2 = System.currentTimeMillis();System.out.println("Matrix X after FFT:");Matrix.show(X);System.out.println("FFT递归版本耗时:"+(s2-s1)+"毫秒");long s3 = System.currentTimeMillis();fft.DFT(X);long s4 = System.currentTimeMillis();System.out.println("DFT耗时:"+(s4-s3)+"毫秒");}}

测试结果

python

运行代码

if __name__ == '__main__':#随机生成 维度为1024的列向量x = np.random.random(1024)print('x矩阵为:')print(x)print('fft结果为:')print(fft_recurrence(x))print('')#打印不同方法的fft耗时对比start_1 = time.perf_counter()fft_recurrence(x)end_1 = time.perf_counter()print("fft_recurrence cost:",(end_1-start_1)*1000,'毫秒')start_2 = time.perf_counter()np.fft.fft(x)end_2 = time.perf_counter()print('numpy.fft.fft() cost:', (end_2 - start_2)*1000,'毫秒')start_3 = time.perf_counter()DFT(x)end_3 = time.perf_counter()print('dft cost:', (end_3 - start_3)*1000,'毫秒')# 用numpy.fft的结果和我的fft对比,返回True则两者相同result = np.allclose(fft_recurrence(x),np.fft.fft(x))print('my fft numpy.fft计算出的结果相同?',result)

OUTPUT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aG0MoMCr-1636098095680)(imgs/2021-11-05-15-25-43.png)]

我们调用了numpy.fft用于验证我们的FFT是否正确,可以看到python实现的FFT得到的结果是正确的。
现在我们对代码进行一点修改来测验java的FFT是否正确。
替换了x向量为

    x = []for i in range(16):x.append(i)

打印结果为

Java

同样生成16维的向量,[0,1,2…15]

		int n = 16;FFT fft = new FFT();//随机生成一个列向量,该向量的每一个元素都是随机的复数Complex[][] x = new Complex[n][1];for (int i =0;i<n;i++)
//			x[i][0] = new Complex(Math.random()%10,Math.random()%10);x[i][0] = new Complex(i,0);

OUTPUT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qwt7uwig-1636098095682)(imgs/2021-11-05-15-32-36.png)]

这里显示0毫秒是因为取的时间是long,长整型,而花费时间小于1毫秒所以显示为0

对比

我们不妨让python版和Java版同时计算一个大向量来看看结果。
现在我们将n变为1024,

java耗时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcVSb6X5-1636098095682)(imgs/2021-11-05-15-37-59.png)]

python耗时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdLUYhD1-1636098095683)(imgs/2021-11-05-15-37-48.png)]
可以看到同样的递归版本,Java耗时比python要少了一半多。这还是在没有进行优化的情况下。

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

相关文章

  1. ESP8266 AT命令应用

    1.ESP8266作为client&#xff0c;TCP, 透传模式 ATRST //复位重启 ATCWQAP //断开热点 ATCWMODE1 //设置station ATCWLAP //扫描热点 ATCWJAP"热点"&#xff0c;"密码" ATCIPMODE1 //透传模式 ATCIFSR …...

    2024/4/15 0:18:05
  2. js 数组对象去重

    js 数组对象去重 arrayDeduplicate(array) {let map new Map()for (let item of array) {if (!map.has(item.id)) {map.set(item.id, item)}}return [...map.values()]},...

    2024/4/15 0:18:15
  3. java运算符>>和>>>区别

    >>&#xff1a;右移 >>>&#xff1a;无符号右移 首先说明一下&#xff0c;计算里的数字是以二进制的方式储存的。 以bety为例&#xff0c;bety站一个字节&#xff0c;即8位数的二进制。 如&#xff1a;2 储存方式&#xff1a;0000 0010 &#xff0c;其中左边…...

    2024/5/6 22:44:13
  4. Zabbix5.0版本 宏(macro)概念详解

    宏(macro)的概念&#xff1a; macro&#xff0c;预设的文本替换模式&#xff1a;宏是一种抽象概念(Abstraction)&#xff0c;它根据一些列预定义的规则替换一定的文本模式&#xff0c;而解释或编译器在遇到宏时会自动进行这一模式替换。类似地&#xff0c;zabbix基于宏保存预设…...

    2024/4/15 4:47:43
  5. Java-方法5--递归

    递归 定义&#xff1a;递归就是A方法调用A方法&#xff0c;自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。 它通常把一个大型复杂的问题层层转化为个与原问题相似的规模较小的问题来求解&#xff0c;递归策略只需少量的程序就可描述出解题过程所需要的多次重复…...

    2024/4/15 0:17:45
  6. Mysql8.0版本忘记密码怎么修改密码

    mysql8.0版本忘记密码怎么修改密码 通过my.ini文件跨权限修改密码行不通&#xff0c;可以直接在DOS窗口操作修改密码 亲测有效&#xff0c;由于密码已修改好&#xff0c;就没有重新修改配图了。 1、找到MySQL安装目录下的bin目录并在DOS窗口切换到bin目录下。 ①DOS窗口输入s…...

    2024/5/6 23:32:52
  7. PPT文件限制编辑如何取消

    PPT文件设置了编辑限制&#xff0c;导致每次想要编辑PPT文件的时候都需要取消编辑限制才行。如果没有密码或者忘记密码就没办法取消编辑限制&#xff0c;那么忘记了编辑限制&#xff0c;我们应该如何解决问题&#xff1f; 如果没有正确的密码&#xff0c;我们想要解决问题&…...

    2024/4/15 0:17:50
  8. Angularjs自定义验证指令

    今天做表单验证&#xff0c;学习一下angular的验证功能&#xff0c;总体来说&#xff0c;一般的需求够用了&#xff0c;如果不够用&#xff0c;还可以自定义验证指令&#xff0c;下面就是我写的一个自定义验证指令&#xff0c;功能是检查输入里有没有特殊字符。 javascript an…...

    2024/5/6 20:18:40
  9. 和月薪5W的阿里程序员聊过后,才知道自己一直在打杂...

    前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了腾讯和阿里的offer&#xff0c;最后选择了阿里。 阿里内部将员工一共分为了14个等级&#xff0c;P6是资深工程师&#xff0c;P7是技术专家。 其中P6和P7就是一个分水岭了&#xff0c;P6是最接近P7的不持股员工&#x…...

    2024/4/20 13:51:27
  10. 记录Caused by: com.mysql.cj.exceptions.CJCommunicationsException

    1、使用命令查看抛异常的数据库服务器配置的超时时间&#xff08;单位&#xff1a;秒&#xff09; show VARIABLES like ‘wait_timeout’; 2、查看自己项目中数据库连接池的配置&#xff08;单位&#xff1a;毫秒&#xff09; druid.timeBetweenEvictionRunsMillis 3、解决方…...

    2024/5/6 14:10:56
  11. 蓝桥杯A的B的C次方次方

    package aaaaa;import java.math.BigInteger; import java.util.Iterator; import java.util.Scanner;public class M1 {public static void main(String[] args) {// 据说很多人的题目会有一大堆废话&#xff0c;本傻就不在这里废话了。// 就是叫你算A的B的C次方次方。// 当然…...

    2024/4/19 23:16:17
  12. MapReduce核心原理

    MapReduceMapReduce优缺点MapReduce优点MapReduce缺点MapReduce核心思想(重点)MapReduce优缺点 MapReduce优点 1 MapReduce易于编程 它简单的实现一些接口&#xff0c;就可以完成一个分布式程序&#xff0c;这个分布式程序可以分布到大量廉价的 PC机器上运行。也就是说你写一…...

    2024/4/18 21:59:32
  13. python中字符串常用的函数方法

    字符串的内建函数 String.capitalize() 把字符串的第一个字符大写 String.upper() 将字符串转化为大写 String.lower() 将字符串转化为小写 String.center(len长度&#xff0c;“str”) 以string为中心两边填充&#xff0c;致使string长度为len string.rjust((len长度&#xf…...

    2024/4/15 4:38:01
  14. 伽罗瓦传记

    伽罗瓦(Evariste Galois)作为史上最传奇的数学家,一生都在作死。 小时候与数学老师互相看不起,惨遭留级。 中学时写出了关于五次方程代数解(史上首次引入“群”概念)的论文,寄给大数学家柯西,要求他转交法兰西科学院审查,结果柯西不屑一顾,直接扔了。 次年写出三篇论…...

    2024/4/18 0:30:03
  15. Python遇到OSError: [Errno 22] Invalid argument:

    python使用docx库写入doc文件 在最后一步操作doc.save(‘D:\练习excel\tieba3.docx’)报错 发现可能是文件名字存在转义字符所以报错 解决方法&#xff1a;改掉文件中的转义字符或者所有路径采用双斜杠 最后我改为了&#xff1a; doc.save(‘D:\练习excel\tieba3.docx’)...

    2024/4/19 5:41:58
  16. 前端笔记2

    201.对前端开发的理解 Web 前端开发简单来说就是网站的开发。最基础的工作就是实现效果图&#xff0c;把视觉稿通过页面代码的方式表现出来能够真实反映视觉稿且能够通 过浏览器的兼容。与设计师和后台人员进行沟通&#xff0c;优化和完善前端项目。 作为一名前端开发人员&am…...

    2024/4/20 0:45:11
  17. 利用matlab实现无约束最优化方法

    1.最速下降法 最速下降法-----两个特征&#xff1a;1.相邻两次迭代的搜索方向正交&#xff0c;即在向极小值点逼近的过程中会出现锯齿现象&#xff0c;从而导致逼近速度越来越慢&#xff1b;2.给定二元正定二次函数&#xff0c;用最速梯度下降法求其极小值点&#xff0c;会产生…...

    2024/4/7 2:09:48
  18. VB ByVal 变量符号代表含义

    最近要写一个写卡程序,对方提供的DEMO是VB写的,遇到一堆奇怪的符号。$string %integer #double &long !single...

    2024/4/16 6:26:17
  19. 合同模板与架构制作

    前景介绍&#xff1a; 在做二手房交易时&#xff0c;需要根据客户需求制定对应的合同模板。我们一般都用word先做好文档&#xff0c;在生成为XML格式&#xff0c;再讲xml格式放到程序中使用。 制作过程&#xff1a; 1、先做好word文档&#xff1a; 2、另存为XML格式&#xf…...

    2024/4/18 5:53:25
  20. JQ获取本月动态日期

    getFullDate(new Date().setDate(1)) //参数为几号 function getFullDate(targetDate) { var D, y, m, d; if (targetDate) { D new Date(targetDate); y D.getFullYear(); m D.getMonth() 1; d …...

    2024/4/18 10:06:03

最新文章

  1. vue常用时间修饰符记录

    1、stop&#xff1a;阻止冒泡 如下&#xff1a;正常情况下&#xff0c;我们点击最内层的inner_inner的时候&#xff0c;事件会向上冒泡&#xff0c;inner 和outer也会执行。我们在inner_inner事件加上.stop修饰符&#xff0c;就会阻止事件向上冒泡&#xff0c;功能等价于原来的…...

    2024/5/7 11:38:34
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 【Locust分布式压力测试】

    Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…...

    2024/5/7 4:57:37
  4. 如何转行成为产品经理?

    转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…...

    2024/5/4 23:56:47
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57