You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中缩放n×p矩阵X,使X%*%t(X)对角线元素全为1

用R的scale函数实现行归一化,使X%*%t(X)对角线全为1

原理说明

要满足diag(X %*% t(X)) = rep(1, n),本质是让矩阵每一行的欧几里得范数(平方和开根号)等于1——因为X %*% t(X)的第i个对角线元素,就是X第i行向量与自身的内积(即该行元素的平方和)。

具体实现步骤

  1. 计算X每行的L2范数;
  2. 利用scale函数对转置后的矩阵按列缩放(对应原矩阵的行);
  3. 转置回原矩阵形状,得到缩放结果。

代码示例

# 构造测试矩阵(3行2列)
X <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3, ncol = 2)

# 计算每行的L2范数
row_norms <- sqrt(rowSums(X^2))

# 处理范数为0的行(避免除以0错误)
row_norms[row_norms == 0] <- 1

# 用scale函数实现行归一化
X_scaled <- t(scale(t(X), center = FALSE, scale = row_norms))

# 验证结果:对角线元素应全部为1
diag(X_scaled %*% t(X_scaled))

代码解释

  • t(X):将原矩阵转置,把行转换为列,适配scale函数默认按列处理的逻辑;
  • scale(..., center = FALSE):关闭中心化(仅做缩放操作,不需要减去行均值);
  • scale(..., scale = row_norms):指定每列(对应原矩阵的行)的缩放因子为该行的L2范数,实现每行除以自身范数;
  • t(...):将处理后的矩阵转置回原形状,得到行归一化后的结果。

内容的提问来源于stack exchange,提问作者Pame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:51:35