当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R trind.generator 生成上三角存储的索引数组


R语言 trind.generator 位于 mgcv 包(package)。

说明

为上三角存储生成最多四阶的索引数组。在处理生成对称数组的高阶导数时很有用。主要供内部使用。

用法

trind.generator(K = 2, ifunc=FALSE, reverse= !ifunc)

参数

K

确定数组大小的正整数。

ifunc

如果返回 TRUE 索引函数来代替索引数组。

reverse

是否应该计算反向指数?如果 ifunc==TRUE 可能不会。

细节

假设 m=1 和您使用类似 for(i in 1:K) for(j in i:K) for(k in j:K) for(l in k:K) {a[,m] <- something; m <- m+1 } 的代码填充一个数组,并执行此操作,因为实际上对于索引 i、j、k、l 的任何排列都会存储相同的 "something"。显然,在存储中,我们有限制 l>=k>=j>=i,但对于访问,我们希望对索引没有限制。 i4[i,j,k,l] 为不受限制的索引生成适当的mi3 和 i2 对 3d 和 2d 数组执行相同的操作。如果 ifunc==TRUEi2i3i4 是函数,因此 i4(i,j,k,l) 返回适当的 m 。对于高K,函数版本可以节省存储空间,但速度较慢。

如果计算的话,反向索引会挑选出冗余存储的对称数组的唯一元素。索引指的是当冗余数组作为其基础向量被访问时元素的位置。例如,3 x 3 对称矩阵的逆索引为 1,2,3,5,6,9。

一个列表,其中条目 i1i4 是最多四个维度的数组,每个维度包含 K 个索引。如果返回 ifunc==TRUE 索引函数来代替索引数组。如果返回 reverse==TRUE 反向索引 i1ri4r(始终作为数组)。

例子

library(mgcv)
A <- trind.generator(3,reverse=TRUE)

# All permutations of c(1, 2, 3) point to the same index (5)
A$i3[1, 2, 3] 
A$i3[2, 1, 3]
A$i3[2, 3, 1]
A$i3[3, 1, 2]
A$i3[1, 3, 2]

## use reverse indices to pick out unique elements
## just for illustration...
A$i2;A$i2[A$i2r]
A$i3[A$i3r]


## same again using function indices...
A <- trind.generator(3,ifunc=TRUE)
A$i3(1, 2, 3) 
A$i3(2, 1, 3)
A$i3(2, 3, 1)
A$i3(3, 1, 2)
A$i3(1, 3, 2)

作者

Simon N. Wood <simon.wood@r-project.org>.

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Generates index arrays for upper triangular storage。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。