格拉姆·施密特与 R

2023-11-22

以下是执行第 1 页中的 Gram Schmidt 的 MATLAB 代码http://web.mit.edu/18.06/www/Essays/gramschmidtmat.pdf

由于我没有 MATLAB,我花了几个小时尝试用 R 执行此操作 这是我的R

f=function(x){

  m=nrow(x);
  n=ncol(x);
  Q=matrix(0,m,n);
  R=matrix(0,n,n);

  for(j in 1:n){
    v=x[,j,drop=FALSE];

    for(i in 1:j-1){
      R[i,j]=t(Q[,i,drop=FALSE])%*%x[,j,drop=FALSE];
      v=v-R[i,j]%*%Q[,i,drop=FALSE]
    }

    R[j,j]=max(svd(v)$d);
    Q[,j,,drop=FALSE]=v/R[j,j]}

    return(list(Q,R))
  }
}

它一直说有错误:

v=v-R[i,j]%*%Q[,i,drop=FALSE] 

or

R[j,j]=max(svd(v)$d);

我将 MATLAB 代码转换为 R 时做错了什么???


只是为了好玩,我添加了此代码的犰狳版本并对其进行了基准测试

犰狳代码:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;

//[[Rcpp::export]]
List grahm_schimdtCpp(arma::mat A) {
    int n = A.n_cols;
    int m = A.n_rows;
    arma::mat Q(m, n);
    Q.fill(0);
    arma::mat R(n, n);
    R.fill(0);  
    for (int j = 0; j < n; j++) {
    arma::vec v = A.col(j);
    if (j > 0) {
        for(int i = 0; i < j; i++) {
        R(i, j) = arma::as_scalar(Q.col(i).t() *  A.col(j));
        v = v - R(i, j) * Q.col(i);
        }
    }
    R(j, j) = arma::norm(v, 2);
    Q.col(j) = v / R(j, j);
    }
    return List::create(_["Q"] = Q,
                     _["R"] = R
    );
    }

R代码未优化(直接基于算法)

grahm_schimdtR <- function(A) {
    m <- nrow(A)
    n <- ncol(A)
    Q <- matrix(0, nrow = m, ncol = n)
    R <- matrix(0, nrow = n, ncol = n)
    for (j in 1:n) {
    v <- A[ , j, drop = FALSE]
        if (j > 1) {
    for(i in 1:(j-1)) {
            R[i, j] <- t(Q[,i,drop = FALSE]) %*% A[ , j, drop = FALSE]
            v <- v - R[i, j] * Q[ ,i]
    }
    }
    R[j, j] = norm(v, type = "2")
    Q[ ,j] = v / R[j, j]
    }

    list("Q" = Q, "R" = R)

}

R 中的本机 QR 分解

qrNative <- function(A) {
    qrdec <- qr(A)
    list(Q = qr.R(qrdec), R = qr.Q(qrdec))
}

我们将使用与原始文档中相同的矩阵来测试它(上面帖子中的链接)

A <- matrix(c(4, 3, -2, 1), ncol = 2)

all.equal(grahm_schimdtR(A)$Q %*% grahm_schimdtR(A)$R, A)
## [1] TRUE

all.equal(grahm_schimdtCpp(A)$Q %*% grahm_schimdtCpp(A)$R, A)
## [1] TRUE

all.equal(qrNative(A)$Q %*% qrNative(A)$R, A)
## [1] TRUE

现在让我们对其进行基准测试

require(rbenchmark)
set.seed(123)
A <- matrix(rnorm(10000), 100, 100)
benchmark(qrNative(A),
          grahm_schimdtR(A),
          grahm_schimdtCpp(A),
          order = "elapsed")
##                  test replications elapsed relative user.self
## 3 grahm_schimdtCpp(A)          100   0.272    1.000     0.272
## 1         qrNative(A)          100   1.013    3.724     1.144
## 2   grahm_schimdtR(A)          100  84.279  309.849    95.042
##   sys.self user.child sys.child
## 3    0.000          0         0
## 1    0.872          0         0
## 2   72.577          0         0

我真的很喜欢将代码移植到 Rcpp 中是多么容易......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

格拉姆·施密特与 R 的相关文章

  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • 在 R 中创建虚拟变量,排除某些情况为 NA

    我的数据看起来像这样 V1 V2 A 0 B 1 C 2 D 3 E 4 F 5 G 9 我想创建一个虚拟变量R where 0 1 1 2 3 4 and NA 0 5 9 应该很简单 有人可以帮忙吗 我们可以转换V2 into a fa
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou

随机推荐

  • max和fmax的区别(跨平台编译)

    在 Xcode 中 可以正常编译 float falloff fmin 1 0 fmax 0 0 distanceSqrd cRadius 但是在 Visual Studio 2010 中它出错了 我必须使用 max 而不是 fmax di
  • 里氏替换原则是否也适用于实现接口的类?

    1 LSP是否也适用于接口 这意味着我们应该能够使用实现特定接口的类并仍然获得预期的行为 2 如果确实如此 那么为什么对接口进行编程被认为是一件好事 顺便说一句 我知道对接口进行编程会增加松散耦合 如果反对使用继承的主要原因之一是由于不使用
  • 如何在散点图中可视化非线性关系

    我想直观地探索两个变量之间的关系 这种关系的函数形式在密集散点图中不可见 如下所示 如何在Python中的散点图中添加低平滑度 或者您还有其他建议来直观地探索非线性关系吗 我尝试了以下方法 但它无法正常工作 借鉴来自米歇尔 德胡恩 impo
  • Safari 在输入焦点上出现不需要的自动滚动到顶部

    我有这个页面 div class app div class main panel div div
  • 仅当满足条件时才从 ConcurrentQueue 出列

    如何使 a 的下一个元素出列ConcurrentQueue仅当满足某些条件时 例如 如果下一个要出队的项目满足特定条件 则将其出队 否则将其保留 本质上是一个 DequeueIf or TryDequeueIf method Example
  • 如何在 Android 上使用 facebook 测试用户

    我需要使用来自 android 的 facebook 测试用户的帮助 我正在使用 facebook android sdk 我需要能够以测试用户身份登录并执行诸如发布到流之类的操作 我不想使用与此应用程序关联的开发者帐户 因为它是我的个人帐
  • Pandas - 图像到 DataFrame

    我想将 RGB 图像转换为 DataFrame 以便获得每个像素的坐标及其 RGB 值 x y red green blue 0 0 0 154 0 0 1 1 0 149 111 0 2 2 0 153 0 5 3 0 1 154 0 9
  • Fragment 到 Activity 通信的 Android 最佳实践

    我是 Android Fragment 的新手 正在尝试学习 Fragment 到 Activity 的通信 Android 中用于 Fragment 到 Activity 通信的更好方法 最佳实践 是什么 假设我有 FragmentS 和
  • MarshalJSON 无需同时将所有对象存储在内存中

    我想用json Encoder对大量数据流进行编码 而无需一次将所有数据加载到内存中 I want to marshal this t struct Foo string Bar is a stream of objects I don t
  • Spark工作人员无法在EC2集群上找到JAR

    我正在使用 Spark ec2 运行一些 Spark 代码 当我将 master 设置为 本地 那么它运行良好 但是 当我将 master 设置为 MASTER 时 工作人员立即失败 并出现 java lang NoClassDefFoun
  • a:visited 在 Mozilla Firefox 中不起作用

    我创建了一个链接 当我尝试设置样式时 a visited text decoration underline color FF0000 这似乎不起作用 它在 IE 中运行良好 我也遵守了命令 链接 访问 悬停 活动 这是一个已知问题 还是我
  • JavaScript 中具有多个条件的“querySelectorAll()”

    是否可以通过以下方式进行搜索querySelectorAll 使用多个不相关的条件 如果是 怎么办 并且 如何指定这些条件是 AND 还是 OR 条件 例如 如何找到全部forms ps and legends 与单个querySelect
  • Node.JS、Express 和 Heroku - 如何处理 HTTP 和 HTTPS?

    我有一个非常普通的 Express 应用程序 简单的服务器逻辑 视图 大量客户端 JS 我必须执行许多 AJAX 请求 其中一些需要通过 HTTPS 协议进行保护 有些则不需要 因此 我的服务器应该同时支持 HTTP 和 HTTPS 它也应
  • 获取点向量的边界框?

    我有一个点向量存储在std vector实例 我想计算这些点的边界框 我尝试过使用这段代码 bool compare1 ofPoint const p1 ofPoint const p2 return p1 x lt p2 x p1 y l
  • 在 python tkinter 中设置 Checkbutton 或 Labelframe 的样式

    我使用 python tkinter 设计了一个 GUI 现在我想为Checkbutton和Labelframe设置样式 例如字体 颜色等 我已经阅读了一些有关 tkinter 样式主题的答案 并且使用以下方法来设置 Checkbutton
  • 将 WinForms TextBox 更改为 BorderStyle.None 会导致文本被截断

    我已经改变了WinFormsTextBox控制无边界 当我这样做时 框中文本的底部像素行被切断 Top BorderStyle Fixed3D 默认 Bottom BorderStyle None 您可以看到无边框文本框中的最后一段文本被截
  • 无法使用 OpenCV 命名空间

    我正在尝试安装 OpenCV 并认为我已经完成了 但这有错误 include
  • HttpURLConnection:是否需要调用connect()?

    我见过的许多例子都没有明确调用connect 相反 他们只是使用getInputStream or getResponseCode 我假设所有这些需要连接的 HttpURLConnection 方法只需调用connect 他们自己 是否存在
  • 检查 EOF 和 fgetc() 错误的更好方法是什么? [复制]

    这个问题在这里已经有答案了 我总是使用这种方法 int c while c fgetc fp EOF printf c c 在我看来 它更具可读性和健壮性 但对于我的一个回答link chux评论说 if feof fp 比 整数c whi
  • 格拉姆·施密特与 R

    以下是执行第 1 页中的 Gram Schmidt 的 MATLAB 代码http web mit edu 18 06 www Essays gramschmidtmat pdf 由于我没有 MATLAB 我花了几个小时尝试用 R 执行此操