Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如果矩阵的每个条目为',则将其除以;它比零大_R - Fatal编程技术网

R:如果矩阵的每个条目为',则将其除以;它比零大

R:如果矩阵的每个条目为',则将其除以;它比零大,r,R,我需要将1除以矩阵中的每个条目,如果条目大于零。我目前使用以下方法(1.divide.2.convert-Inf-to-zero),但它的工作速度非常慢,而且矩阵非常庞大 wii <- 1/wii wii[is.infinite(wii)] <- 0 我认为你的订单是个问题。为什么要对要转换为零的元素进行除法呢 wii[wii!=0] <- 1/wii[wii!=0] wii[wii!=0]我想你的订单是个问题。为什么要对要转换为零的元素进行除法呢 wii[wii!=0]

我需要将1除以矩阵中的每个条目,如果条目大于零。我目前使用以下方法(1.divide.2.convert-Inf-to-zero),但它的工作速度非常慢,而且矩阵非常庞大

wii <- 1/wii
wii[is.infinite(wii)] <- 0

我认为你的订单是个问题。为什么要对要转换为零的元素进行除法呢

wii[wii!=0] <- 1/wii[wii!=0]

wii[wii!=0]我想你的订单是个问题。为什么要对要转换为零的元素进行除法呢

wii[wii!=0] <- 1/wii[wii!=0]

wii[wii!=0]这会快一点:

wii <- 1/(1/(1-1/(wii == 0)) + wii)

wii这会快一点:

wii <- 1/(1/(1-1/(wii == 0)) + wii)

wii-1;在对wii=matrix(样本(c(0,10),1e6,T),nrow=1e3)进行的简单测试中,这是比较慢的,所以我想看看这是否增加了任何有价值的东西。是的,这实际上也是很慢的。你的矩阵有多大?在我的机器上大约需要1秒。这对
2.4e7
操作来说太长了吗?我的错!数据帧不是矩阵-1;在对wii=matrix(样本(c(0,10),1e6,T),nrow=1e3)进行的简单测试中,这是比较慢的,所以我想看看这是否增加了任何有价值的东西。是的,这实际上也是很慢的。你的矩阵有多大?在我的机器上大约需要1秒。这对
2.4e7
操作来说太长了吗?我的错!数据帧不是一个matrixIMHO
so=function(wii){tmp-IMHO
so=function(wii){tmp
N = 1e3

wii = matrix(sample(c(0, 10), N*N, T), nrow = N)

op = function(wii) {
  wii <- 1/wii
  wii[is.infinite(wii)] <- 0
}

so = function(wii) {
  tmp <- wii != 0     # doing this is faster than Señor O's original answer
  wii[tmp] <- 1/wii[tmp]
}

ed = function(wii) {
  wii <- 1/(1/(1-1/(wii == 0)) + wii)
}

sg = function(wii) {
  tmp <- which(wii != 0)
  wii[tmp] <- 1/wii[tmp];
}

require(microbenchmark)
microbenchmark(op(wii), so(wii), ed(wii), sg(wii), times = 100)
#Unit: milliseconds
#    expr      min        lq    median        uq       max neval
# op(wii) 47.91634  64.51116  76.39793  88.13995 125.72246   100
# so(wii) 82.00116 114.90850 133.25893 150.97547 196.63302   100
# ed(wii) 26.80661  41.64416  66.26577  79.08794 130.08377   100
# sg(wii) 30.86709  43.68241  50.01369  61.89294  97.65006   100