- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在查看 this answer 中的基准测试,并想将它们与 diag
进行比较(用于不同的答案)。不幸的是,似乎diag
需要年龄:
nc <- 1e4
set.seed(1)
m <- matrix(sample(letters,nc^2,replace=TRUE), ncol = nc)
microbenchmark(
diag = diag(m),
cond = m[row(m)==col(m)],
vec = m[(1:nc-1L)*nc+1:nc],
mat = m[cbind(1:nc,1:nc)],
times=10)
identical
测试了这些.我从
this homework question 的答案之一中提取了“cond” .结果与整数矩阵相似,
1:26
而不是
letters
.
Unit: microseconds
expr min lq mean median uq max neval
diag 604343.469 629819.260 710371.3320 706842.3890 793144.019 837115.504 10
cond 3862039.512 3985784.025 4175724.0390 4186317.5260 4312493.742 4617117.706 10
vec 317.088 329.017 432.9099 350.1005 629.460 651.376 10
mat 272.147 292.953 441.7045 345.9400 637.506 706.860 10
c(m)[v]
,其中
v
与“vec”基准测试中使用的向量相同。这两个时间...
v <- (1:nc-1L)*nc+1:nc
microbenchmark(diaglike=c(m)[v],vec=m[v])
# Unit: microseconds
# expr min lq mean median uq max neval
# diaglike 579224.436 664853.7450 720372.8105 712649.706 767281.5070 931976.707 100
# vec 334.843 339.8365 568.7808 646.799 663.5825 1445.067 100
c
在 diag
?
最佳答案
摘要
截至 R version 3.2.1 (世界著名宇航员)diag()
已收到更新。讨论移至r-devel有人指出 c()
剥离非名称属性,这可能是将其放置在那里的原因。虽然有些人担心删除c()
会在类似矩阵的对象上引起未知问题,Peter Dalgaard 发现,“c()
中的 diag()
起作用的唯一情况是 M[i,j] != M[(i-1)*m+j]
AND c(M)
将以列优先顺序对 M
进行字符串化,所以 M[i,j] == c(M)[(i-1)*m+j]
。”
Luke Tierney 测试了@Frank 对 c()
的删除,发现它对 CRAN 或 BIOC 没有任何影响,因此实现以在 line 27 上用 x[...] 替换 c(x)[...] .这导致 diag()
中相对较大的加速.下面是一个速度测试,显示了 R 3.2.1 版本的 diag()
的改进.
library(microbenchmark)
nc <- 1e4
set.seed(1)
m <- matrix(sample(letters,nc^2,replace=TRUE), ncol = nc)
microbenchmark(diagOld(m),diag(m))
Unit: microseconds
expr min lq mean median uq max neval
diagOld(m) 451189.242 526622.2775 545116.5668 531905.5635 540008.704 682223.733 100
diag(m) 222.563 646.8675 644.7444 714.4575 740.701 1015.459 100
关于r - 为什么 diag 功能这么慢? [在 R 3.2.0 或更早版本中],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30035939/
我目前正在尝试复制 R 中的 diag() 函数以获得更好的理解。不幸的是,我的解决方案仅对对称矩阵有用。 diagnew <- function(x){ k <- c() for(i in
我想实现以下方程(Horn-Schunck 方法的精确解): 我的代码: def HS_exact(Ix, Iy, It, u, v, lamda): M = u.shape[0] N = u
我正在尝试为矩阵的多个对角线赋值。例如,我有这个矩阵: >>> u = np.zeros(25).reshape(5, 5) >>> u array([[0., 0., 0., 0., 0.],
有没有办法使用diag()矩阵中的函数而不使用内置函数或迭代? M<-matrix(1:9, ncol=3) # make a matrix q5b<-function(M){ #fun
我正在用 Perl 编写一些测试,这些测试有相当多的设置。这个设置都存在于测试脚本使用的模块中。我希望能够从模块中打印一些诊断信息,并打算使用 Test::More 中的 diag 函数。问题是,当您
diag 函数不会将结果保存到变量。 import numpy as np A = np.random.rand(4,4) d = np.diag(A) print d # above gives t
假设我有两个非常大的矩阵 A (M-by-N) 和 B (N-by-M)。我需要 A*B 的对角线。计算完整的 A*B 需要 M*M*N 次乘法,而计算它的对角线只需要 M*N 次乘法,因为不需要计算
当使用 scipy.sparse.spdiags 或 scipy.sparse.diags 时,我注意到 want 我认为是例程中的错误,例如 scipy.sparse.spdiags([1.1,1.
好了别笑了。 2005 年,我读到有关使用 System.Diagnostics 命名空间进行跟踪的信息,它很复杂,从那以后我就一直使用 log4net 和 NLog(其他人也是如此)。 今天,我的应
我想,我有一个关于 diag 的两级问题在 R 和 matlab 中。 1)我想知道是否已经开发出一种方法来访问 R 中矩阵的不同对角线,类似于在 Matlab 中的方式(参见 http://www.
我正在尝试使用 numpy 包将一些 MATLAB 代码转换为 Python,但不确定 eig(A) 和 diag(A) 返回什么,其中 A 是我的问题标题的矩阵。 例如,我在 matlab 中有以下
我需要以下对角线: diag(X %*% solve(A) %*% t(X)) 其中A 是满秩方阵,X 是矩形矩阵。 A 和 X 都是稀疏的。 我知道求逆矩阵很糟糕,除非你真的需要它。但是,我看不出如
在对线性统计模型进行预测时,我们通常有一个模型矩阵 X对应于我们要进行预测的点的预测变量;系数向量 beta ;和方差-协方差矩阵 V .计算预测只是 X %*% beta .计算预测方差的最直接方法
W 是一个又高又瘦的实值矩阵,diag(S) 是一个由 +1 或 组成的对角矩阵>-1 在对角线上。我想要 A = W * diag(S) * W' 的特征分解,其中单引号表示转置。主要问题是 A 太
W 是一个又高又瘦的实值矩阵,diag(S) 是一个由 +1 或 组成的对角矩阵>-1 在对角线上。我想要 A = W * diag(S) * W' 的特征分解,其中单引号表示转置。主要问题是 A 太
尝试运行 MEEP 模拟时出现以下错误: HDF5-DIAG: Error detected in HDF5 (1.10.5) thread 0: #000: H5F.c line 509 in
难以从 numpy 数组生成三对角矩阵。我设法复制了给出的结果 here ,但我无法将这些技术应用于我的问题。我也可能误解了 scipy.sparse.diag 的应用. 就上下文而言,我正在研究一个
我正在尝试在 caffe 中加载 hdf5,它不工作。我检查了路径,甚至能够使用查看器查看 hdf 文件。一切正常,但咖啡似乎无法加载。 我使用这样的 python 脚本编写 hdf5,其中 X 和标
我是 Phpunit 的新手,巧合的是(截至 2012 年 9 月)我安装了全新的 phpunit 3.7.0(实际上它显示为 3.7.1,因为我的 phpunit 安装是 git checkout)
我正在查看 this answer 中的基准测试,并想将它们与 diag 进行比较(用于不同的答案)。不幸的是,似乎diag需要年龄: nc <- 1e4 set.seed(1) m <- matr
我是一名优秀的程序员,十分优秀!