获取python中向量的floor值的总和

时间:2017-10-26 14:12:11

标签: python r

我来自R背景,现在正在尝试学习Python。目前,我正在研究如何在Python中进行一些我用来做R的计算。例如,得到总和

enter image description here

在R中,我可以做类似

的事情
x <- 1:2015
dat <- rep(NA, times = 2015)
for (i in x){
  dat[i] <- floor(sqrt(i) / 10)
}
dat
sum(dat)

dat <- sapply(x, function(i) floor(sqrt(i) / 10))
sum(dat)

给出正确答案5064。

但是,Python中的以下代码给了我5060.0。

import pandas as pd
import numpy as np
sum(np.floor(np.sqrt(range(1,2015)) / 10))

我做错了什么?

编辑:正如Gregor所建议的那样,R代码可以更好地写成sum(floor(sqrt(x) / 10))

3 个答案:

答案 0 :(得分:2)

在python中,range(a,b)生成器提供了从ab-1的可迭代,如文档中所述。为了得到这样的总和,你需要一个range(1, 2016)

答案 1 :(得分:1)

sum(np.floor(np.sqrt(range(1,2016)) / 10))

因为range功能。然后不包括最后一个值。因此,2016不是2015

答案 2 :(得分:0)

你的问题是范围(1,2015)仅包括1到2014年的整数。你应该使用范围(1,2016)

但是你不需要pandas和numpy这样做:如果时间优化不是问题,list comprehension是一种处理基本操作的更加pythonic方式:

import math
myrange=range(1,2016)
result=sum([int(math.sqrt(k)/10) for k in myrange])