CPASSOC代码详解

加载环境

library("MASS")
require(MASS)
# Modern Applied Statistics with S,"S"指的是S语言,由贝尔实验室的约翰·钱伯斯(John Chambers)等人开发。S语言是R语言的前身,许多R语言的语法和功能都继承自S语言。
library("Matrix")
# Matrix包提供了用于处理稀疏和密集矩阵的函数。它可以高效地执行线性代数操作,比如计算矩阵的逆、求特征值等
# require(compiler)
# 使用require是因为它并不是必需的。如果你不使用compiler包,代码仍然可以正常运行。使用compiler包的目的是为了通过JIT(Just-In-Time)编译来提高代码的执行速度,特别是在处理大量循环或复杂计算时。
# enableJIT(4)
# 这是compiler的函数。这行代码启用JIT编译器,并设置为最高级别(4),即编译所有代码。这可以显著提高代码的执行速度。

计算未截断的检验分数

Non_Trucated_TestScore <- function(X, SampleSize, CorrMatrix) 
{Wi = matrix(SampleSize, nrow = 1);sumW = sqrt(sum(Wi^2));W = Wi / sumW;Sigma = ginv(CorrMatrix);XX = apply(X, 1, function(x) {x1 <- matrix(x, ncol = length(x), nrow = 1); T = W %*% Sigma %*% t(x1);T = (T*T) / (W %*% Sigma %*% t(W));return(T[1,1]);}		);		return(XX);
}
SHom <- cmpfun(Non_Trucated_TestScore);

函数参数:

  • X: 一个矩阵,表示样本数据。X是一个M×K的矩阵,其中M是SNP的数量,K是要组合的汇总统计量的数量。矩阵的每一列包含一个性状的M个SNP的汇总统计量。如果在一个队列中分析了多个性状,每个性状的汇总统计量将放在一列中。矩阵的每一行代表一个SNP。
  • SampleSize: 样本大小。SampleSize是一个长度为M的向量,包含了用于获得K个汇总统计量的M个样本量。当前版本假设不同SNP的样本量是相同的。SampleSize用于在组合汇总统计量时作为权重。
  • CorrMatrix: 相关矩阵。CorrMatrix是X矩阵列之间的相关矩阵,是一个K×K的矩阵,其中K是汇总统计量的数量。。如果X矩阵中没有缺失值,可以通过调用R函数cor(X)来获得CorrMatrix。如果X中有缺失值,可以在删除具有缺失汇总统计量的SNP后以相同方式计算CorrMatrix。对于GWAS数据,这个过程对估计相关矩阵的影响很小。

函数的主要步骤如下:

  1. 计算权重 W,并对其进行归一化。
  2. 计算相关矩阵的广义逆矩阵 Sigma
  3. 对每一行数据 x 进行处理:
    • x 转换为矩阵 x1
    • 计算检验分数 T
  4. 返回每一行数据的检验分数。

用公式来表达:

  1. 计算权重 W
    W = W i ∑ W i 2 W = \frac{Wi}{\sqrt{\sum Wi^2}} W=Wi2 Wi

  2. 计算相关矩阵的广义逆矩阵 Sigma
    Σ = ginv ( CorrMatrix ) \Sigma = \text{ginv}(\text{CorrMatrix}) Σ=ginv(CorrMatrix)

  3. 对每一行数据 x,计算检验分数 T
    x 1 = matrix ( x , ncol = length ( x ) , nrow = 1 ) x1 = \text{matrix}(x, \text{ncol} = \text{length}(x), \text{nrow} = 1) x1=matrix(x,ncol=length(x),nrow=1)
    T = W ⋅ Σ ⋅ x 1 T T = W \cdot \Sigma \cdot x1^T T=WΣx1T
    T = ( T ⋅ T ) W ⋅ Σ ⋅ W T T = \frac{(T \cdot T)}{W \cdot \Sigma \cdot W^T} T=WΣWT(TT)

  4. 返回每一行数据的检验分数 T[1,1]

最终返回所有行的检验分数。

计算截断的检验分数

# X:矩阵,每行表示一个SNP(M),每列表示一个变量(K)
# SampleSize:样本大小向量
# CorrMatrix:相关矩阵
# correct:是否校正权重flag,默认值为1
# startCutoff:截断起始值,默认为0
# endCutoff:截断结束值,默认为1
# CutoffStep:截断步长,默认值为0.05
# isAllpossible:是否使用所有可能的截断值,默认为TRUETrucated_TestScore <- function(X, SampleSize, CorrMatrix, correct = 1, startCutoff = 0, endCutoff = 1, CutoffStep = 0.05, isAllpossible = T) 
{N = dim(X)[2];Wi = matrix(SampleSize, nrow = 1);sumW = sqrt(sum(Wi^2));W = Wi / sumW;	XX = apply(X, 1, function(x) {TTT = -1;if (isAllpossible == T ) {cutoff = sort(unique(abs(x)));	  ## it will filter out any of them. } else {cutoff = seq(startCutoff, endCutoff, CutoffStep);		}for (threshold in cutoff) {x1 = x;index = which(abs(x1) < threshold);if (length(index) == N) break;A = CorrMatrix;W1 = W;	if (length(index) !=0 ) {   x1 = x1[-index];						A  = A[-index, -index];   ## update the matrixW1 = W[-index]; }if (correct == 1){index = which(x1 < 0);if (length(index) != 0) {W1[index] = -W1[index];    ## update the sign}}A = ginv(A);x1 = matrix(x1, nrow = 1); W1 = matrix(W1, nrow = 1);T = W1 %*% A %*% t(x1);T = (T*T) / (W1 %*% A %*% t(W1));if (TTT < T[1,1]) TTT = T[1,1];	}return(TTT);}		);		return(XX);
}
SHet <- cmpfun(Trucated_TestScore);

函数参数:

  • X: 一个矩阵,表示样本数据。
  • SampleSize: 样本大小。
  • CorrMatrix: 相关矩阵。
  • correct: 一个布尔值,默认为1,表示是否需要修正符号。
  • startCutoff: 截断的起始值,默认为0。
  • endCutoff: 截断的结束值,默认为1。
  • CutoffStep: 截断步长,默认为0.05。
  • isAllpossible: 一个布尔值,默认为 T,表示是否使用所有可能的截断值。

函数的主要步骤如下:

  1. 计算权重 W,并对其进行归一化。
  2. 对每一行数据 x 进行处理:
    • 如果 isAllpossibleT,则计算所有可能的截断值 cutoff
    • 否则,生成从 startCutoffendCutoff 的序列作为截断值。
  3. 对每一个截断值 threshold
    • 更新数据 x1 和相关矩阵 A,去除小于 threshold 的元素。
    • 如果 correct 为1,修正符号。
    • 计算截断检验分数 T,并更新最大值 TTT
  4. 返回每一行数据的最大截断检验分数。

用公式来表达:

  1. 计算权重 W
    W = W i ∑ W i 2 W = \frac{Wi}{\sqrt{\sum Wi^2}} W=Wi2 Wi

  2. 对每一行数据 x,计算截断值 cutoff
    cutoff = { sort(unique(abs(x))) if isAllpossible = T seq(startCutoff, endCutoff, CutoffStep) otherwise \text{cutoff} = \begin{cases} \text{sort(unique(abs(x)))} & \text{if } \text{isAllpossible} = T \\ \text{seq(startCutoff, endCutoff, CutoffStep)} & \text{otherwise} \end{cases} cutoff={sort(unique(abs(x)))seq(startCutoff, endCutoff, CutoffStep)if isAllpossible=Totherwise

  3. 对每一个截断值 threshold,更新数据 x1 和相关矩阵 A
    x 1 = x (remove elements where  ∣ x 1 ∣ < threshold ) x1 = x \quad \text{(remove elements where } |x1| < \text{threshold}) x1=x(remove elements where x1∣<threshold)
    A = CorrMatrix (remove corresponding rows and columns) A = \text{CorrMatrix} \quad \text{(remove corresponding rows and columns)} A=CorrMatrix(remove corresponding rows and columns)
    W 1 = W (remove corresponding elements) W1 = W \quad \text{(remove corresponding elements)} W1=W(remove corresponding elements)

  4. 如果 correct 为1,修正符号:
    W 1 [ index ] = − W 1 [ index ] (where  x 1 < 0 ) W1[\text{index}] = -W1[\text{index}] \quad \text{(where } x1 < 0) W1[index]=W1[index](where x1<0)

  5. 计算截断检验分数 T
    A = ginv ( A ) A = \text{ginv}(A) A=ginv(A)
    x 1 = matrix ( x 1 , n r o w = 1 ) x1 = \text{matrix}(x1, nrow = 1) x1=matrix(x1,nrow=1)
    W 1 = matrix ( W 1 , n r o w = 1 ) W1 = \text{matrix}(W1, nrow = 1) W1=matrix(W1,nrow=1)
    T = ( W 1 ⋅ A ⋅ x 1 T ) 2 W 1 ⋅ A ⋅ W 1 T T = \frac{(W1 \cdot A \cdot x1^T)^2}{W1 \cdot A \cdot W1^T} T=W1AW1T(W1Ax1T)2

  6. 返回每一行数据的最大截断检验分数 TTT
    T T T = max ⁡ ( T ) TTT = \max(T) TTT=max(T)

最终返回所有行的最大截断检验分数。

估计Gamma分布的参数

EstimateGamma <- function (N = 1E6, SampleSize, CorrMatrix, correct = 1, startCutoff = 0, endCutoff = 1, CutoffStep = 0.05, isAllpossible = T) {Wi = matrix(SampleSize, nrow = 1);   sumW = sqrt(sum(Wi^2));W = Wi / sumW;Permutation = mvrnorm(n = N, mu = c(rep(0, length(SampleSize))), Sigma = CorrMatrix, tol = 1e-8, empirical = F);Stat =  Trucated_TestScore(X = Permutation, SampleSize = SampleSize, CorrMatrix = CorrMatrix, correct = correct, startCutoff = startCutoff, endCutoff = endCutoff, CutoffStep = CutoffStep, isAllpossible = isAllpossible);a = min(Stat)*3/4ex3 = mean(Stat*Stat*Stat)V =	var(Stat);for (i in 1:100){E = mean(Stat)-a;k = E^2/Vtheta = V/Ea = (-3*k*(k+1)*theta**2+sqrt(9*k**2*(k+1)**2*theta**4-12*k*theta*(k*(k+1)*(k+2)*theta**3-ex3)))/6/k/theta}para = c(k,theta,a);return(para);
}	  

函数参数:

  • N: 生成的样本数量,默认为1E6。
  • SampleSize: 样本大小。
  • CorrMatrix: 相关矩阵。
  • correct: 一个布尔值,默认为1,表示是否需要修正符号。
  • startCutoff: 截断的起始值,默认为0。
  • endCutoff: 截断的结束值,默认为1。
  • CutoffStep: 截断步长,默认为0.05。
  • isAllpossible: 一个布尔值,默认为 T,表示是否使用所有可能的截断值。

函数的主要步骤如下:

  1. 计算权重 W,并对其进行归一化。
  2. 生成 N 个服从多元正态分布的随机样本 Permutation
  3. 使用 Trucated_TestScore 函数计算截断检验分数 Stat
  4. 计算初始参数 aex3V
  5. 通过迭代更新参数 a,并计算Gamma分布的参数 ktheta
  6. 返回参数 kthetaa

用公式来表达:

  1. 计算权重 W
    W = W i ∑ W i 2 W = \frac{Wi}{\sqrt{\sum Wi^2}} W=Wi2 Wi

  2. 生成 N 个服从多元正态分布的随机样本 Permutation
    Permutation = mvrnorm ( n = N , μ = 0 , Σ = CorrMatrix ) \text{Permutation} = \text{mvrnorm}(n = N, \mu = \mathbf{0}, \Sigma = \text{CorrMatrix}) Permutation=mvrnorm(n=N,μ=0,Σ=CorrMatrix)

  3. 使用 Trucated_TestScore 函数计算截断检验分数 Stat
    Stat = Trucated_TestScore ( X = Permutation , SampleSize = SampleSize , CorrMatrix = CorrMatrix , correct = correct , startCutoff = startCutoff , endCutoff = endCutoff , CutoffStep = CutoffStep , isAllpossible = isAllpossible ) \text{Stat} = \text{Trucated\_TestScore}(X = \text{Permutation}, \text{SampleSize} = \text{SampleSize}, \text{CorrMatrix} = \text{CorrMatrix}, \text{correct} = \text{correct}, \text{startCutoff} = \text{startCutoff}, \text{endCutoff} = \text{endCutoff}, \text{CutoffStep} = \text{CutoffStep}, \text{isAllpossible} = \text{isAllpossible}) Stat=Trucated_TestScore(X=Permutation,SampleSize=SampleSize,CorrMatrix=CorrMatrix,correct=correct,startCutoff=startCutoff,endCutoff=endCutoff,CutoffStep=CutoffStep,isAllpossible=isAllpossible)

  4. 计算初始参数 aex3V
    a = 3 4 min ⁡ ( Stat ) a = \frac{3}{4} \min(\text{Stat}) a=43min(Stat)
    ex3 = mean ( Stat 3 ) \text{ex3} = \text{mean}(\text{Stat}^3) ex3=mean(Stat3)
    V = var ( Stat ) V = \text{var}(\text{Stat}) V=var(Stat)

  5. 通过迭代更新参数 a,并计算Gamma分布的参数 ktheta
    for  i in  1 : 100 do \text{for } i \text{ in } 1:100 \text{ do} for i in 1:100 do
    E = mean ( Stat ) − a E = \text{mean}(\text{Stat}) - a E=mean(Stat)a
    k = E 2 V k = \frac{E^2}{V} k=VE2
    θ = V E \theta = \frac{V}{E} θ=EV
    a = − 3 k ( k + 1 ) θ 2 + 9 k 2 ( k + 1 ) 2 θ 4 − 12 k θ ( k ( k + 1 ) ( k + 2 ) θ 3 − ex3 ) 6 k θ a = \frac{-3k(k+1)\theta^2 + \sqrt{9k^2(k+1)^2\theta^4 - 12k\theta(k(k+1)(k+2)\theta^3 - \text{ex3})}}{6k\theta} a=6kθ3k(k+1)θ2+9k2(k+1)2θ412kθ(k(k+1)(k+2)θ3ex3)

  6. 返回参数 kthetaa
    para = ( k , θ , a ) \text{para} = (k, \theta, a) para=(k,θ,a)

最终返回所有行的检验分数。

计算经验分布

# N:模拟次数,默认值为1E6,即100,000
# 其它参数与 Trucated_TestScore 相同EmpDist <- function (N = 1E6, SampleSize, CorrMatrix, correct = 1, startCutoff = 0, endCutoff = 1, CutoffStep = 0.05, isAllpossible = T) {Wi = matrix(SampleSize, nrow = 1);   sumW = sqrt(sum(Wi^2));W = Wi / sumW;Permutation = mvrnorm(n = N, mu = c(rep(0, length(SampleSize))), Sigma = CorrMatrix, tol = 1e-8, empirical = F);Stat =  Trucated_TestScore(X = Permutation, SampleSize = SampleSize, CorrMatrix = CorrMatrix, correct = correct, startCutoff = startCutoff, endCutoff = endCutoff, CutoffStep = CutoffStep, isAllpossible = isAllpossible);return(Stat);
}	

函数参数:

  • N: 生成的样本数量,默认为1,000,000。
  • SampleSize: 样本大小。
  • CorrMatrix: 相关矩阵。
  • correct: 一个布尔值,默认为1,表示是否需要修正符号。
  • startCutoff: 截断的起始值,默认为0。
  • endCutoff: 截断的结束值,默认为1。
  • CutoffStep: 截断步长,默认为0.05。
  • isAllpossible: 一个布尔值,默认为 T,表示是否使用所有可能的截断值。

函数的主要步骤如下:

  1. 计算权重 W,并对其进行归一化。
  2. 使用多元正态分布生成 N 个样本,均值为0,协方差矩阵为 CorrMatrix
  3. 调用 Trucated_TestScore 函数计算截断检验分数。
  4. 返回计算得到的统计量 Stat

用公式来表达:

  1. 计算权重 W
    W = W i ∑ W i 2 W = \frac{Wi}{\sqrt{\sum Wi^2}} W=Wi2 Wi

  2. 使用多元正态分布生成 N 个样本:
    Permutation = mvrnorm ( n = N , μ = 0 , Σ = CorrMatrix ) \text{Permutation} = \text{mvrnorm}(n = N, \mu = \mathbf{0}, \Sigma = \text{CorrMatrix}) Permutation=mvrnorm(n=N,μ=0,Σ=CorrMatrix)

  3. 调用 Trucated_TestScore 函数计算截断检验分数:
    Stat = Trucated_TestScore ( X = Permutation , SampleSize = SampleSize , CorrMatrix = CorrMatrix , correct = correct , startCutoff = startCutoff , endCutoff = endCutoff , CutoffStep = CutoffStep , isAllpossible = isAllpossible ) \text{Stat} = \text{Trucated\_TestScore}(X = \text{Permutation}, \text{SampleSize} = \text{SampleSize}, \text{CorrMatrix} = \text{CorrMatrix}, \text{correct} = \text{correct}, \text{startCutoff} = \text{startCutoff}, \text{endCutoff} = \text{endCutoff}, \text{CutoffStep} = \text{CutoffStep}, \text{isAllpossible} = \text{isAllpossible}) Stat=Trucated_TestScore(X=Permutation,SampleSize=SampleSize,CorrMatrix=CorrMatrix,correct=correct,startCutoff=startCutoff,endCutoff=endCutoff,CutoffStep=CutoffStep,isAllpossible=isAllpossible)

  4. 返回统计量 Stat

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

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

相关文章

《精通ChatGPT:从入门到大师的Prompt指南》附录B:推荐阅读资源

作者&#xff1a;斯图尔特拉塞尔 (Stuart Russell) 和 彼得诺维格 (Peter Norvig) 简介&#xff1a;这本书被誉为人工智能领域的经典教材&#xff0c;内容涵盖了AI的基本原理、算法及其应用。无论是入门者还是专业研究者&#xff0c;都能从中获得启发。 2. 《深度学习》 作者…

【目标跟踪网络训练 Market-1501 数据集】DeepSort 训练自己的跟踪网络模型

前言 Deepsort之所以可以大量避免IDSwitch&#xff0c;是因为Deepsort算法中特征提取网络可以将目标检测框中的特征提取出来并保存&#xff0c;在目标被遮挡后又从新出现后&#xff0c;利用前后的特征对比可以将遮挡的后又出现的目标和遮挡之前的追踪的目标重新找到&#xff0…

企业网页制作

随着互联网的普及&#xff0c;企业网站已成为企业展示自己形象、吸引潜在客户、开拓新市场的重要方式。而企业网页制作则是构建企业网站的基础工作&#xff0c;它的质量和效率对于企业网站的成败至关重要。 首先&#xff0c;企业网页制作需要根据企业的特点和需求进行规划。在网…

前端 移动端 手机调试 (超简单,超有效 !)

背景&#xff1a;webpack工具构建下的vue项目 1. 找出电脑的ipv4地址 2. 替换 host 3. 手机连接电脑热点或者同一个wifi 。浏览器打开链接即可。

Spring运维之业务层测试数据回滚以及设置测试的随机用例

业务层测试数据回滚 我们之前在写dao层 测试的时候 如果执行到这边的代码 会在数据库 里面留下数据 运行一次留一次数据 开发有开发数据库&#xff0c;运行有运行数据库 我们先连数据库 在pom文件里引入mysql的驱动和mybatis-plus的依赖 在数据层写接口 用mybatis-plus进…

浅谈JDBC

文章目录 一、什么是 JDBC&#xff1f;二、JDBC 操作流程三、JDBC代码例子 一、什么是 JDBC&#xff1f; JDBC是一种可用于执行SQL语句的JAVA API&#xff0c;是链接数据库和JAVA应用程序的纽带。JDBC一般需要进行3个步骤&#xff1a;与数据库建立一个链接、向数据库发送SQL语…

当AGI能够自我复制并传播到任意电脑时,会怎样?

当人工通用智能&#xff08;AGI&#xff09;具备自我复制能力&#xff0c;并能够传播到任何一台计算机作为宿主机时&#xff0c;这种情景可能带来一系列深远的影响和挑战。以下是一些潜在的影响和可能的结果&#xff1a; 1. 安全威胁与恶意利用 AGI的自我复制和传播能力可能被…

openh264 场景变化检测算法源码分析

文件位置 openh264/codec/processing/scenechangedetection/SceneChangeDetection.cppopenh264/codec/processing/scenechangedetection/SceneChangeDetection.h 代码流程 说明&#xff1a; 通过代码流程分析&#xff0c;当METHOD_SCENE_CHANGE_DETECTION_SCREEN场景类型为时…

Web前端工资调整:深入剖析与全面解读

Web前端工资调整&#xff1a;深入剖析与全面解读 在快速发展的互联网行业中&#xff0c;Web前端技术日新月异&#xff0c;而与之紧密相关的工资调整也成为了业内热议的话题。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析Web前端工资调整的原因、趋势、…

Linux -- 了解 vim

目录 vim Linux 怎么编写代码&#xff1f; 了解 vim 的模式 什么是命令模式&#xff1f; 命令模式下 vim 的快捷键&#xff1a; 光标定位&#xff1a; 复制粘贴&#xff1a; 删除及撤销&#xff1a; 注释代码&#xff1a; 什么是底行模式&#xff1f; ​编辑 ​编辑…

Java:111-SpringMVC的底层原理(中篇)

这里续写上一章博客&#xff08;110章博客&#xff09;&#xff1a; 现在我们来学习一下高级的技术&#xff0c;前面的mvc知识&#xff0c;我们基本可以在67章博客及其后面相关的博客可以学习到&#xff0c;现在开始学习精髓&#xff1a; Spring MVC 高级技术&#xff1a; …

输入与随机数

Java的两个类库 输入 如何实现键盘输入&#xff1f;我们需要了解到Scanner这个类&#xff0c;其作用于及键盘输入。 类库&#xff1a;java.util 如何使用&#xff1f;分为3步走&#xff1a; 导入包&#xff08;一般idea会帮做&#xff09; import java.util.Scanner;创建对…

Java学习日志26:Double.NEGATIVE_INFINITY与Double.MIN_VALUE的区别

Double.NEGATIVE_INFINITY 和 Double.MIN_VALUE 都是 Java 中 Double 类的静态成员&#xff0c;但它们表示的含义不同。 Double.NEGATIVE_INFINITY 表示双精度浮点数的负无穷大。它是一个特殊的数值&#xff0c;在数值计算中通常用于表示一些特殊情况&#xff0c;比如除以零的…

Large-Scale LiDAR Consistent Mapping usingHierarchical LiDAR Bundle Adjustment

1. 代码地址 GitHub - hku-mars/HBA: [RAL 2023] A globally consistent LiDAR map optimization module 2. 摘要 重建精确一致的大规模激光雷达点云地图对于机器人应用至关重要。现有的基于位姿图优化的解决方案&#xff0c;尽管它在时间方面是有效的&#xff0c;但不能直接…

ubuntu使用docker安装openwrt

系统&#xff1a;ubuntu24.04 架构&#xff1a;x86 1. 安装docker 1.1 离线安装 docker下载地址 根据系统版本&#xff0c;依次下载最新的三个关于docker的软件包 container.io&#xff08;注意后缀版本顺序&#xff09;docker-ce-clidocker-ce 然后再ubuntu系统中依次按顺…

【召回第一篇】召回方法综述

各个网站上找的各位大神的优秀回答&#xff0c;记录再此。 首先是石塔西大佬的回答&#xff1a;工业界推荐系统中有哪些召回策略&#xff1f; 万变不离其宗&#xff1a;用统一框架理解向量化召回前言常读我的文章的同学会注意到&#xff0c;我一直强调、推崇&#xff0c;不要…

多种策略提升线上 tensorflow 模型推理速度

前言 本文以最常见的模型 Bi-LSTM-CRF 为例&#xff0c;总结了在实际工作中能有效提升在 CPU/GPU 上的推理速度的若干方法&#xff0c;包括优化模型结构&#xff0c;优化超参数&#xff0c;使用 onnx 框架等。当然如果你有充足的 GPU &#xff0c;结合以上方法提升推理速度的效…

真空衰变,真正的宇宙级灾难,它到底有多可怕?

真空衰变&#xff0c;真正的宇宙级灾难&#xff0c;它到底有多可怕&#xff1f; 真空衰变 真空衰变&#xff08;Vacuum decay&#xff09;是物理学家根据量子场论推测出的一种宇宙中可能会发生的现象&#xff0c;这种现象被称为真正的宇宙级灾难&#xff0c;它到底有多可怕呢…

前端 Vue 操作文件方法(导出下载、图片压缩、文件上传和转换)

一、前言 本文对前端 Vue 项目开发过程中&#xff0c;经常遇到要对文件做一些相关操作&#xff0c;比如&#xff1a;文件导出下载、文件上传、图片压缩、文件转换等一些处理方法进行归纳整理&#xff0c;方便后续查阅和复用。 二、具体内容 1、后端的文件导出接口&#xff0c;…

【报文数据流中的反压处理】

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中&#xff0c;经常涉及到报文的数据流处理&#xff1b;为了防止数据丢失&#xff0c;和各模块的流水处理&#xff1b;因此需要到反压机制&#xff1b; 反压机制目前接触到的有两种&#xff1a;一是基…