2017-10-26 6 views
2

私はRの背景から来ていて、今はPythonを学ぼうとしています。現時点では、私は例えばR.に行うために使用Pythonでいくつかの計算を行う方法で探しています、私はPythonのベクトルの床の値の合計を取得する

ような何かを行うことができ、合計

Rで

enter image description here

を取得します

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))と書くとよいでしょう。

+2

http://pythoncentral.io/pythons-range-function-explained/ここでさらに読むために – voiDnyx

+2

ただ、ノート内ではベクトル化されているので、 'のために'または 'サプリー'が必要です。 Pythonのソリューションと同様に、 'dat = sum(floor(sqrt(x)/ 10))'を実行することができます。 – Gregor

+0

注目、@ Gregor。 – hpesoj626

答えて

2

pythonでは、range(a,b)ジェネレータは、aからb-1までの繰り返しを提供します。そのような和を作るには、range(1, 2016)

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

のためです。最後の値は含まれません。したがって、2016ではない2015

0

あなたの問題はその範囲(1,2015)には1から2014の整数だけが含まれています。あなたは範囲(1,2016)

を使用する必要がありますしかし、あなたはこれを行うにはパンダとnumpyのを必要としない:リスト内包は、時間の最適化が問題でない場合は、基本的な操作を処理するために、より神託の方法です:

import math 
myrange=range(1,2016) 
result=sum([int(math.sqrt(k)/10) for k in myrange]) 
関連する問題