当我有一个维度为 (i,j,k) 的数组和一个维度为 (j,q) 的矩阵时。我如何将每个 (,,k) 与该矩阵相乘。举个例子更有意义。
A <- array(c(rep(1,20), rep(2,20), rep(3,20)),dim = c(10,2,3))
B <- matrix(c(1:10), nrow = 2)
# multiply each A[,,i]%*%B
C <- array(NA, dim=c(nrow(A), ncol(B), 3))
C[] <- apply(A, 3, function(x) x%*%B)
Run Code Online (Sandbox Code Playgroud)
我可以通过这种方式获得结果,但我正在寻找一种更有效的方式,例如使用 ATensor 包。我希望有人能帮助我解决这个问题。
我试图减少数据中每个因子变量的级别数.我想减少执行2次操作的级别数:
我写了一个工作正常的函数,但我不喜欢这些代码.如果REMAIN级别没有足够的观察结果也没关系.我更喜欢dplyr方法.
ReplaceFactor <- function(data, max_levels, min_values_factor){
# First make sure that not to many levels are in a factor
for(i in colnames(data)){
if(class(data[[i]]) == "factor"){
if(length(levels(data[[i]])) > max_levels){
levels_keep <- names(sort(table(data[[i]]), decreasing = T))[1 : (max_levels - 1)]
data[!get(i) %in% levels_keep, (i) := "REMAIN"]
data[[i]] <- as.factor(as.character(data[[i]]))
}
}
}
# Now make sure that in each level has enough observations
for(i in colnames(data)){
if(class(data[[i]]) == "factor"){
if(min(table(data[[i]])) < min_values_factor){
levels_replace <- table(data[[i]])[table(data[[i]]) < min_values_factor]
data[get(i) %in% …Run Code Online (Sandbox Code Playgroud) 我试图找到一种最佳方法来查找每行中最大值的索引.问题是我无法找到一种真正有效的方法.一个例子:
Dummy <- matrix(runif(500000000,0,3), ncol = 10000)
> system.time(max.col(Dummy, "first"))
user system elapsed
5.532 0.075 5.599
> system.time(apply(Dummy,1,which.max))
user system elapsed
14.638 0.210 14.828
> system.time(rowRanges(Dummy))
user system elapsed
2.083 0.029 2.109
Run Code Online (Sandbox Code Playgroud)
我的主要问题是,与使用rowRanges函数计算最大值和最小值相比,为什么计算最大值的索引的速度超过2倍.有没有办法如何提高计算每行最大索引的性能?