當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。