高維中介數據:基于交替方向乘子法(ADMM)的高維度單模態中介模型的參數估計(入門+實操)

全文摘要

?用于高維度單模態中介模型的參數估計,采用交替方向乘子法(ADMM)進行計算。該包提供了確切獨立篩選(SIS)功能來提高中介效應的敏感性和特異性,并支持Lasso、彈性網絡、路徑Lasso和網絡約束懲罰等不同正則化方法。

Pathway Lasso

背景

傳統的結構方程建模(SEM)在處理大量中介變量時變得不穩定且計算復雜。Pathway Lasso引入了一個新的懲罰函數,它是一種非凸乘積函數的凸松弛,使得同時估計和選擇路徑效應成為可能。通過使用交替方向乘子法(ADMM)的算法,Pathway Lasso可以以閉合形式求解參數,并且其估計器在大樣本下具有漸近一致性。Pathway Lasso的新方法用于在高維中介變量的情況下估計和選擇路徑效應。

實現方法

Pathway Lasso是一種針對高維中介變量問題的新方法,它通過結構方程建模(SEM)的正則化途徑來處理。在高維設置中,當中介變量的數量接近或大于樣本量時,該方法聚焦于估計和選擇路徑效應。為了改善估計的穩定性,Pathway Lasso避免將高維中介變量直接降低為線性組合,這通常是通過主成分分析(PCA)或其他矩陣分解技術實現的,但這些方法限制了對每個中介路徑的解釋性。相反,Pathway Lasso引入了一個新的凸懲罰項,即Pathway Lasso懲罰,直接對路徑效應進行正則化。這種方法解決了傳統Lasso和其他凸正則化方法無法處理的乘積參數問題,因為路徑效應通常表示為兩個參數的乘積,這是一個非凸函數。通過Pathway Lasso懲罰,可以同時實現路徑選擇和路徑效應估計,允許模型直接處理相關中介變量,提供更直接和簡單的中介路徑解釋,尤其適用于分析多個大腦區域作為中介變量的情況

Pathway Lasso的優勢

在路徑選擇和估計準確性方面相較于其他方法具有以下優勢

  • 高路徑選擇準確性:在模擬數據和fMRI數據集上的應用表明,Pathway Lasso 提出的方法比其他方法具有更高的路徑選擇準確性。
  • 低估計偏誤:Pathway Lasso 方法在估計路徑效應時表現出更低的偏差。
  • 解決非凸性問題:Pathway Lasso 引入了一個新的凸懲罰,直接對乘積非凸函數進行正則化,解決了現有方法未處理的問題。
  • 直接和明確的解釋性:與使用線性組合(如主成分分析)的方法相比,Pathway Lasso 允許對每個中介路徑進行更直接和更簡單的解釋。
  • 處理相關中介變量:Pathway Lasso 允許直接建模相關中介變量,適合分析多個大腦區域作為中介的設置。

實現方法

隨機生成單模態高維度中介分析數據

代碼格式

modalityMediationDataGen(n = 100,p = 50,sigmaY = 1,sizeNonZero = c(3, 3, 4),alphaMean = c(6, 4, 2),alphaSd = 0.1,betaMean = c(6, 4, 2),betaSd = 0.1,sigmaM1 = NULL,gamma = 3,generateLaplacianMatrix = FALSE,seed = 20231201
)

?參數說明

n: 高維中介模型中的主體數量。
p: 高維中介變量的數量。
sigmaY: 因變量誤差分布的標準差。
sizeNonZero: 非零中介變量的數量,生成大、中、小中介效應的模擬場景。
alphaMean, alphaSd: 中介變量與自變量之間效應的平均值和標準差向量。
betaMean, betaSd: 中介變量與因變量之間效應的平均值和標準差向量。
sigmaM1: 中介變量間誤差分布的協方差矩陣,默認為對角矩陣。
gamma: 直接效應的真值。
generateLaplacianMatrix: 邏輯值,指定是否生成網絡懲罰的拉普拉斯矩陣。
seed: 隨機種子,默認為NULL以使用當前種子

返回結果解釋

MediData: 高維中介模型的模擬數據。
MediPara: 中介效應和直接效應的真值。
Info: 輸出包括隨機種子、參數設置以及生成中介模型的拉普拉斯矩陣。

示例代碼?

## 生成分析數據
simuData <- modalityMediationDataGen(seed = 20231201)
str(simuData)
# 輸出結果如下
# List of 3
# $ MediData:List of 3
# ..$ X : num [1:100, 1] 0 0 1 0 0 0 1 0 0 1 ...
# ..$ M1: num [1:100, 1:50] 1.023 -0.369 4.812 1.476 0.188 ...
# ..$ Y : num [1:100, 1] -10.27 6.54 175.08 -1.66 17.55 ...
# $ MediPara:List of 3
# ..$ alpha: num [1, 1:50] 5.99 5.99 6 4.11 4.17 ...
# ..$ beta : num [1:50, 1] 6.11 5.96 6.01 4.05 3.88 ...
# ..$ gamma: num [1, 1] 3
# $ Info    :List of 4
# ..$ parameters     :List of 7
# .. ..$ sigmaY     : num 1
# .. ..$ sizeNonZero: num [1:3] 3 3 4
# .. ..$ alphaMean  : num [1:3] 6 4 2
# .. ..$ alphaSd    : num [1:3] 0.1 0.1 0.1
# .. ..$ betaMean   : num [1:3] 6 4 2
# .. ..$ betaSd     : num [1:3] 0.1 0.1 0.1
# .. ..$ sigmaM1    : num [1:50, 1:50] 1 0 0 0 0 0 0 0 0 0 ...
# ..$ trueValue      :List of 1
# .. ..$ gamma: num [1, 1] 3
# ..$ laplacianMatrix: NULL
# ..$ seed           : num 20231201simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)
str(simuData)
simuData <- modalityMediationDataGen(n = 50, p = 1000, seed = 20231201)
str(simuData)

交叉驗證:cvSingleModalityAdmm

通過設置`numFolds`參數進行交叉驗證,可以評估不同懲罰參數下的模型性能,幫助選擇最佳模型

`交叉驗證的結果,用于評估不同參數組合下Pathway Lasso懲罰方法的效果。輸出結果是一個表格,其中包含以下列:

1. **rho**:這是ADMM算法中的ρ參數的候選值,它影響算法的收斂速度和解的質量。
2. **lambda1a**:Pathway Lasso懲罰中的λ1a參數的候選值,L1 范數懲罰中介變量和自變量之間的影響。
3. **lambda1b**:Pathway Lasso懲罰中的λ1b參數的候選值,中介變量和因變量之間影響的 L1 范數懲罰。
4. **lambda1g**:Pathway Lasso懲罰中的λ1g參數的候選值,直接效應的 L1 范數懲罰。默認值為 10 以解決高估問題。
5. **kappa**:Pathway Lasso懲罰的L1范數參數,控制路徑正則化的具體形式。控制了路徑結構的稀疏性,當?kappa?較小時,懲罰的作用更加平滑,有利于保留更多的特征;當?kappa?較大時,懲罰更加集中,有利于稀疏性,即更多特征被剔除。
6. **nu**:Pathway Lasso懲罰的L2范數參數,同樣影響路徑正則化。nu: 控制了路徑結構中特征之間的相關性,當?nu?較小時,路徑結構更加獨立,有利于減少特征之間的相關性;當?nu?較大時,更多的特征將共享相同的路徑,有助于保留相關性較強的特征。
7. **measure**:評估指標,默認均方根誤差(RMSE),用于衡量預測結果與真實結果之間的差異。低的RMSE值通常意味著更好的模型性能,因為這表示預測誤差更小。通過比較這些結果,可以選取最優的參數組合來構建最終模型。

8. lambda2alambda2b: 是 Pathway Lasso 方法中額外引入的懲罰項的參數。它們可以控制特征之間的相關性,幫助更好地保留特征間的相關性信息。

  • lambda2a:L2 范數懲罰中介變量和自變量之間的影響
  • lambda2b:中介變量和因變量之間影響的 L2 范數懲罰
# 2種不同的懲罰方法## 1.使用交叉驗證進行 ElasticNet 懲罰參數調優
# 執行交叉驗證
cvElasticNetResults <- cvSingleModalityAdmm(X = simuData$MediData$X,  # 獨立變量的數據矩陣(暴露/治療/組)Y = simuData$MediData$Y,  # 因變量的數據向量(結果響應)M1 = simuData$MediData$M1,  # 單模態中介變量numFolds = 5,  # 交叉驗證的折數typeMeasure = "rmse",  # 評估指標類型,默認為均方根誤差rho = c(0.9, 1, 1.1),  # rho 參數的候選值序列lambda1a = c(0.1, 0.5, 1),  # lambda1a 參數的候選值序列lambda1b = c(0.1, 0.3),  # lambda1b 參數的候選值序列lambda1g = c(1, 2),  # lambda1g 參數的候選值序列lambda2a = c(0.5, 1),  # lambda2a 參數的候選值序列lambda2b = c(0.5, 1),  # lambda2b 參數的候選值序列penalty = "ElasticNet"  # 使用 ElasticNet 懲罰
)# 輸出結果: 
> cvElasticNetResultsrho lambda1a lambda1b lambda1g lambda2a lambda2b  measure[1,] 0.9      0.1      0.1        1      0.5      0.5 18.23108[2,] 1.0      0.1      0.1        1      0.5      0.5 18.32964[3,] 1.1      0.1      0.1        1      0.5      0.5 18.17303[4,] 0.9      0.5      0.1        1      0.5      0.5 17.77722[5,] 1.0      0.5      0.1        1      0.5      0.5 17.78040[6,] 1.1      0.5      0.1        1      0.5      0.5 17.77446[7,] 0.9      1.0      0.1        1      0.5      0.5 17.80479
[到達getOption("max.print") -- 略過很多行]]
attr(,"class")
[1] "cvSingleModalityAdmm"--------------------------------------------------------------------------
# 2. 使用交叉驗證進行 Pathway Lasso 懲罰參數調優(lambda2a, lambda2b 未調整)
# 執行交叉驗證
cvPathwayLassoResults <- cvSingleModalityAdmm(X = simuData$MediData$X,  # 獨立變量的數據矩陣(暴露/治療/組)Y = simuData$MediData$Y,  # 因變量的數據向量(結果響應)M1 = simuData$MediData$M1,  # 單模態中介變量numFolds = 5,  # 交叉驗證的折數typeMeasure = "rmse",  # 評估指標類型,默認為均方根誤差rho = c(0.9, 1, 1.1),  # rho 參數的候選值序列lambda1a = c(0.1, 0.5, 1),  # lambda1a 參數的候選值序列lambda1b = c(0.1, 0.3),  # lambda1b 參數的候選值序列lambda1g = c(1, 2),  # lambda1g 參數的候選值序列lambda2a = 1,  # 給定 lambda2a 參數值lambda2b = 1,  # 給定 lambda2b 參數值penalty = "PathwayLasso",  # 使用 Pathway Lasso 懲罰penaltyParameterList = list(kappa = c(0.5, 1), nu = c(1, 2))  # 懲罰參數列表,包括 kappa 和 nu
)# 輸出結果:
cvPathwayLassoResultsrho lambda1a lambda1b lambda1g kappa nu  measure[1,] 0.9      0.1      0.1        1   0.5  1 19.46943[2,] 1.0      0.1      0.1        1   0.5  1 19.37725[3,] 1.1      0.1      0.1        1   0.5  1 19.40920[4,] 0.9      0.5      0.1        1   0.5  1 19.49747
[到達getOption("max.print") -- 略過很多行]]
attr(,"class")
[1] "cvSingleModalityAdmm"

將權矩陣轉換為拉普拉斯矩陣的輔助函數:weightToLaplacian()?

# 將權矩陣轉換為拉普拉斯矩陣的輔助函數:weightToLaplacian() 
set.seed(20231201) # 設置隨機數種子
p <- 5 # 設置節點數
W <- matrix(0, nrow = p, ncol = p) # 初始化權矩陣
W[lower.tri(W)] <- runif(p*(p-1)/2, 0, 1) # 生成隨機權的下三角矩陣
W[upper.tri(W)] <- t(W)[upper.tri(W)] # 使權矩陣對稱
diag(W) <- 1 # 對角線元素設為1
W
# 輸出結果如下
# [,1]      [,2]       [,3]      [,4]       [,5]
# [1,] 1.0000000 0.1623753 0.48119340 0.4406640 0.36219565
# [2,] 0.1623753 1.0000000 0.41138920 0.1344408 0.64471664
# [3,] 0.4811934 0.4113892 1.00000000 0.5306324 0.08042435
# [4,] 0.4406640 0.1344408 0.53063239 1.0000000 0.85450197
# [5,] 0.3621956 0.6447166 0.08042435 0.8545020 1.00000000(L <- weightToLaplacian(W)) # 將權矩陣轉換為拉普拉斯矩陣
# 輸出結果如下
# [,1]        [,2]        [,3]        [,4]        [,5]
# [1,]  0.59124083 -0.06767837 -0.19443191 -0.16374871 -0.13501050
# [2,] -0.06767837  0.57499652 -0.16949748 -0.05094059 -0.24505056
# [3,] -0.19443191 -0.16949748  0.60058145 -0.19491464 -0.02963414
# [4,] -0.16374871 -0.05094059 -0.19491464  0.66218945 -0.28956112
# [5,] -0.13501050 -0.24505056 -0.02963414 -0.28956112  0.66007653

擬合高維單模態中介模型

根據cvSingleModalityAdmm的結果挑選最佳參數,擬合🔤高維單模態中介模型🔤

penalty方法

penalty方法有3種+ 各自對應的懲罰參數列表【penaltyParameterList】

  • 默認為彈性網絡 ElasticNet
    • lambda1a, lambda1b, lambda1g, lambda2a, lambda2b
  • 路徑套索(PathywayLasso)
    • kappa 路徑 Lasso 的 L1 范數懲罰。
    • nu 路徑 Lasso 的 L2 范數懲罰
  • 網絡約束懲罰(Network)
    • 需要應用于網絡懲罰的拉普拉斯矩陣

確定獨立性篩選?(SIS)

SIS:指定是否執行確定獨立性篩選 (sure independence screening, SIS)

  • SISThreshold,中介者目標降維的閾值。默認值為“2”,這會將維度減少到 2*n/log(n)。n代表樣本量

輸出結果

  • gamma:🔤估計直接影響🔤
  • alpha:🔤估計中介變量和自變量之間的影響。🔤
  • beta:🔤估計中介變量和因變量之間的影響🔤

綜合應用

1.?ElasticNet 懲罰
## 生成經驗數據
simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)## ElasticNet 懲罰的參數估計
modelElasticNet <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "ElasticNet" )# 擬合并預測
fitted(modelElasticNet) 
predict(modelElasticNet, matrix(c(0, 1), ncol=1))# SIS獨立性篩選
simuData <- modalityMediationDataGen(n = 50, p = 1000, seed = 20231201)
modelElasticNetSIS <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "ElasticNet", SIS = TRUE ) fitted(modelElasticNetSIS) 
predict(modelElasticNetSIS, matrix(c(0, 1), ncol=1))
2.?使用拉普拉斯矩陣進行網絡懲罰的參數估計

# 1.使用模擬數據中的拉普拉斯矩陣
simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)modelNetwork <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "Network", penaltyParameterList = list(laplacianMatrix = simuData$Info$laplacianMatrix) )# 2. 自定義的拉普拉斯矩陣set.seed(20231201) 
p <- ncol(simuData$MediData$M1) 
W <- matrix(0, nrow = p, ncol = p) 
W[lower.tri(W)] <- runif(p*(p-1)/2, 0, 1) 
W[upper.tri(W)] <- t(W)[upper.tri(W)] 
diag(W) <- 1 
L <- weightToLaplacian(W) modelNetwork <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "Network", penaltyParameterList = list(laplacianMatrix = L) )
3.?Pathway Lasso 懲罰的參數估計
simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)modelPathwayLasso <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "PathwayLasso", penaltyParameterList = list(kappa = 1, nu = 2) )

如果您看到這里,有錢的打個小💴賞~,沒錢的點個"贊"賞,輸出不易,感謝支持!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716316.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

npm 鏡像源切換與設置

項目背景 依賴安裝中斷或響應特別慢。 可以看到當前所用的鏡像是 https://registry.npmjs.org 。 切換淘寶鏡像之后總算能夠安裝下來 命令行模式 查看當前鏡像源 # 查看當前鏡像源 npm config get registry 可以看到默認情況下是官方默認全局鏡像 https://registry.npmjs.o…

競爭加劇下,登頂后的瑞幸該做什么?

瑞幸咖啡僅用短短18個月時間從品牌創立到納斯達克上市&#xff0c;刷新全球最快上市記錄。2020年因交易造假事件被勒令退市股價暴跌80%&#xff0c;有人說這個創造了赴美IPO奇跡的“巨嬰”將是下一個倒下的ofo。2023年瑞幸咖啡以逆勢超速增長領跑咖啡賽道有力回應了市場的質疑&…

Vector中的begin和end函數是左閉右開的區間

vector::end() 函數的語法 vector::end(); 參數&#xff1a; none——它什么都不接受。 返回值&#xff1a; iterator– 它返回一個指向向量的 past-the-end 元素的迭代器。 實際上Vector中的begin和end函數是左閉右開的區間。 例&#xff1a; Input: vector<int>…

Java多線程實現發布和訂閱

目錄 簡介 步驟 1: 定義消息類 步驟 2: 創建發布者 步驟 3: 創建訂閱者 步驟 4: 實現發布-訂閱模型 前言-與正文無關 生活遠不止眼前的苦勞與奔波&#xff0c;它還充滿了無數值得我們去體驗和珍惜的美好事物。在這個快節奏的世界中&#xff0c;我們往往容易陷入工作的漩渦…

棋牌室計時計費管理系統的燈控器連接教程

棋牌室計時計費管理系統的燈控器連接教程 一、前言 以下教程以 佳易王棋牌室計時計費管理系統軟件V18.0為例說明 軟件文件下載可以點擊最下方官網卡片——軟件下載——試用版軟件下載 如上圖&#xff0c;計時計費軟件在開始計時的時候&#xff0c;點擊 開始計時 如果連接了…

YOLOv9獨家改進|動態蛇形卷積Dynamic Snake Convolution與空間和通道重建卷積SCConv與RepNCSPELAN4融合

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、改進點介紹 Dynamic Snake Convolution是一種針對細長微弱的局部結構特征與復雜多變的全局形態特征設計的卷積模塊。 SCConv是一種即插即用的空間…

華為OD機試真題C卷-篇6

100分值題 寬度最小的子矩陣部門人力分配電腦病毒感染會議室占用時間段 寬度最小的子矩陣 給定一個n行 * m列的矩陣&#xff1b;給定一個k個整數的數組k_list&#xff1b;在n*m的矩陣中找一個寬度最小的子矩陣&#xff0c;該子矩陣包含k_list中所有的整數&#xff1b; 輸入描述…

【大數據】Flink SQL 語法篇(九):Window TopN、Deduplication

《Flink SQL 語法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 語法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 語法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇&#xff08;三&…

COM - get VARIANT value - .vt = (VT_BSTR | VT_ARRAY)

文章目錄 COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY)概述筆記END COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY) 概述 取到一個VARIANT值, .vt 0x2008, 查了一下, 0x2008 (VT_BSTR | VT_ARRAY) 查了資料, 這個vt 0x2008是BSTR的數組. 看看咋取值? 網上…

3.2 log |416. 分割等和子集,1049.最后一塊石頭的重量II,494.目標和

416. 分割等和子集 class Solution { public:bool canPartition(vector<int>& nums) {vector<int> dp(10001,0);int sumaccumulate(nums.begin(),nums.end(),0);if(sum%2) return false;int targetsum/2;for(int i0;i<nums.size();i){for(int jtarget;j>…

項目管理:高效推動項目成功的關鍵

項目管理&#xff1a;高效推動項目成功的關鍵 在當今競爭激烈的商業環境中&#xff0c;項目管理已成為企業實現目標和取得成功的關鍵因素。有效的項目管理不僅能夠確保項目按時完成&#xff0c;還能在預算范圍內達到預期的質量標準。本文將探討項目管理的重要性、關鍵環節以及…

Maven安裝并配置本地倉庫

一、安裝Maven 1.下載鏈接 Maven官網下載鏈接 Binary是可執行版本&#xff0c;已經編譯好可以直接使用。 Source是源代碼版本&#xff0c;需要自己編譯成可執行軟件才可使用。 tar.gz和zip兩種壓縮格式,其實這兩個壓縮文件里面包含的內容是同樣的,只是壓縮格式不同 tar.gz格…

Stable Video文本生成視頻公測地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI發布了首個開放視頻模型——"Stable Video"&#xff0c;該創新工具能夠將文本和圖像輸入轉化為生動的場景&#xff0c;將概念轉換成動態影像&#xff0c;生成出電影級別的作品&#xff0c;旨在滿足廣泛的視頻應用需求&#xff0c;包括媒…

STM32 DMA入門指導

什么是DMA DMA&#xff0c;全稱直接存儲器訪問&#xff08;Direct Memory Access&#xff09;&#xff0c;是一種允許硬件子系統直接讀寫系統內存的技術&#xff0c;無需中央處理單元&#xff08;CPU&#xff09;的介入。下面是DMA的工作原理概述&#xff1a; 數據傳輸觸發&am…

解決Java并發問題的常見思路

寫在文章開頭 近期對一些比較老的項目進行代碼走查&#xff0c;碰到一些極端的并發編程惡習&#xff0c;所以筆者就基于此文演示這類問題以及面對并發編程時我們應該需要了解一些常見套路。 Hi&#xff0c;我是sharkChili&#xff0c;是個不斷在硬核技術上作死的java coder&am…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介紹 Stable Diffusion 作為當下最流行的開源 AI 圖像生成模型在游戲行業有著廣泛的應用實踐&#xff0c;無論是 ToC 面向玩家的游戲社區場景&#xff0c;還是 ToB 面向游戲工作室的美術制作場景&#xff0c;都可以發揮很大的價值&#xff0c;如何更好地使用 Stable Dif…

scanf和cin的利弊

scanf和cin的利弊&#xff1a; scanf: 利&#xff1a;耗時短&#xff0c;寫法方便輸入固定格式&#xff0c;比如scanf(“%*d%d”,&a)&#xff0c;可以直接忽略第一個輸入&#xff0c;不用創建新對象&#xff0c;再比如scanf(“%1d”,&x[i])&#xff0c;輸入3214&#x…

卡牌——二分

卡牌 題目分析 想一下前面題的特點&#xff0c;是不是都出現了“最大邊長”&#xff0c;“最小的數”這種字眼&#xff0c;那么這里出現了“最多能湊出多少套牌”&#xff0c;我們可以考慮用二分。接下來我們要看一下他是否符合二段性&#xff0c;二分的關鍵在于二段性。 第…

續Java的執行語句、方法--學習JavaEE的day07

day07 一、特殊的流程控制語句 break(day06) continue 1.理解&#xff1a; 作用于循環中&#xff0c;表示跳過循環體剩余的部分&#xff0c;進入到下一次循環 做實驗&#xff1a; while(true){ System.out.println(“111”); System.out.println(“222”); if(true){ conti…

編譯鏈接實戰(25)gcc ASAN、MSAN檢測內存越界、泄露、使用未初始化內存等內存相關錯誤

文章目錄 1 ASAN1.1 介紹1.2 原理編譯時插樁模塊運行時庫2 檢測示例2.1 內存越界2.2 內存泄露內存泄露檢測原理作用域外訪問2.3 使用已經釋放的內存2.4 將漏洞信息輸出文件3 MSAN1 ASAN 1.1 介紹 -fsanitize=address是一個編譯器選項,用于啟用AddressSanitizer(地址