R中用于上三角矩阵的外部函数
Outer function in R for upper triangular matrix
我目前有这个代码
s1=seq(0,10,length.out=3)
s2=seq(0,10,length.out=3)
d=outer(s1,s2,`-`)
I=outer(s1,s2,`==`)
但是我只想要d
的上三角,所以我现在正在做
d=d[upper.tri(d,diag=T)]
I=I[upper.tri(I,diag=T)]
有没有办法通过将上三角矩阵合并到外部函数中来使这段代码更快?
请注意,这是一个可重现的示例,但是我的代码要大得多,我需要尽可能减少 运行 时间。
outer
内部使用 rep
扩展其参数:
Y <- rep(Y, rep.int(length(X), length(Y)))
if (length(X))
X <- rep(X, times = ceiling(length(Y)/length(X)))
您可以使用子集化来做同样的事情,但只生成三角索引。 sequence
在这种情况下是一个有用的辅助函数:
> i <- sequence(1:3)
> j <- rep(1:3, 1:3)
> d = s1[i] - s2[j]
> I = s1[i] == s2[j]
> d
[1] 0 -5 0 -10 -5 0
> I
[1] TRUE FALSE TRUE FALSE FALSE TRUE
我目前有这个代码
s1=seq(0,10,length.out=3)
s2=seq(0,10,length.out=3)
d=outer(s1,s2,`-`)
I=outer(s1,s2,`==`)
但是我只想要d
的上三角,所以我现在正在做
d=d[upper.tri(d,diag=T)]
I=I[upper.tri(I,diag=T)]
有没有办法通过将上三角矩阵合并到外部函数中来使这段代码更快? 请注意,这是一个可重现的示例,但是我的代码要大得多,我需要尽可能减少 运行 时间。
outer
内部使用 rep
扩展其参数:
Y <- rep(Y, rep.int(length(X), length(Y)))
if (length(X))
X <- rep(X, times = ceiling(length(Y)/length(X)))
您可以使用子集化来做同样的事情,但只生成三角索引。 sequence
在这种情况下是一个有用的辅助函数:
> i <- sequence(1:3)
> j <- rep(1:3, 1:3)
> d = s1[i] - s2[j]
> I = s1[i] == s2[j]
> d
[1] 0 -5 0 -10 -5 0
> I
[1] TRUE FALSE TRUE FALSE FALSE TRUE