2

次のコードは問題なく動作します。しかし、それは非常に冗長に思えます。確かにこれを計算するよりエレガントな方法はありますか?

アイデアは、100 個の増分タイムスタンプのリストがあるということです。これらのタイムスタンプを見て、各タイムスタンプ間の平均時間を計算したいと考えています。

以下のコードは機能しますが、このようにリストを反転させるのは本当に非効率的だと確信しています。

助言がありますか?

#!/usr/bin/python 

nums = [1,4,6,10]
print nums
nums_orig = list(nums)

nums_orig.pop()
nums.reverse()
nums.pop()
nums.reverse()

print nums
print nums_orig

total = 0

for idx, val in enumerate(nums):
  difference = val - nums_orig[idx]
  total += difference
  print idx, val - nums_orig[idx]

print "Mean difference is %d" % (total / len(nums))
4

3 に答える 3

8

numpy がある場合:

>>> import numpy as np
>>> np.diff([1,4,6,10]).mean()
3.0
于 2012-05-04T11:43:16.173 に答える
6

あなたが探しているのは

>>> nums = [1,4,6,10]
>>> [x-y for x,y in zip(nums[1:],nums)]
[3, 2, 4]
>>> delta=[x-y for x,y in zip(nums[1:],nums)]
>>> float(sum(delta))/len(delta)
3.0

Starmap を使用したソリューション

>>> from itertools import starmap
>>> from operator import sub
>>> sum(starmap(sub,zip(nums[1:],nums)))/float(len(nums)-1)
3.0
于 2012-05-04T11:43:32.147 に答える
3

アイデアは、100 個の増分タイムスタンプのリストがあるということです。これらのタイムスタンプを見て、各タイムスタンプ間の平均時間を計算したいと考えています。

それらは増加しているため、差の合計は単純に最初と最後の差になります。一方、差異の数は、値の数より 1 少ないだけです。

したがって、ループは必要ありません。ただ:

(nums[-1] - nums[0])/(len(nums) - 1)
于 2012-05-04T13:00:34.450 に答える