2016-01-19 7 views
5

移動平均と同時に計算し、それをnp.diffと組み合わせる関数があるのだろうか?numpyのdiffと似た関数

配列があり、移動ウィンドウ(移動平均)の平均を計算し、その平均値と次の1要素の差を計算します。

例:

a = [1, 3, 4, 5, 15, 14, 16, 13] 
b = np.diff(a) 
#np.diff makes something like this: `[n] - [n-1]` 
#I want something like this: `[n] - np.mean([n-m : n])` 

#I would like to have a function, where I could vary `m`: 

m = 2 
d = [2, 1.5, 10.5, 4, 1.5, -2] 

私は26000の要素とm以上の配列のためにそれを使用したいと思いますので、その時の計算は、そう長くないだろうので、どのように私は、それを実装するのでしょうか?

答えて

3

編集1:私が最初の答えを与えた後、OPは彼の質問を更新しました。更新された答えはEDIT2の後にあります。

ないあなたがやろうが、この場合、あなたは、単にdiffを得るために、次の操作を行うことができ、正確に何をしてください:

import numpy as np 
diff = np.array(array[n-1:]) - np.array(average[:-n+2]) 

その後diffが所望の出力となります。

array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ]) 

したがって、最初にパラメータnを使用してリストをスライスし、次にリストを配列に変換し、それらを互いに引き算します。上記のコード行は、a)リストの長さが同じ場合、b)nがインデックスであり、開始する要素ではない、c)リストの代わりにnumpy配列を使用した場合:

import numpy as np 

# add one additional value so that the arrays have the same length 
myArray = np.array([1, 3, 4, 5, 15, 14, 16, 13, 17]) 

# choose the starting index rather than the element 
n = 2 

myAverage = np.array([2, 3.5, 4.5, 10, 14.5, 15, 14.5]) 

diffAr = myArray[n:] - myAverage 

array([ 2. , 1.5, 10.5, 4. , 1.5, -2. , 2.5]) 

ただ、一般的なコメント:変数名としてarraydiffを使用しないでください

その後diffArは、この(私はmyArrayに一つの要素を追加しているので、あなたの場合に比べて一つの要素以上)のように見えます。

EDIT2:

質問を変更しました。ここに更新された答えがあります。上記の答えに加えなければならないのは、ウィンドウサイズがmの場合の実行中の平均値を計算する方法です。その後、一つは私が上記まったく同じものを行うことができます。この場合

import numpy as np 

def runningMean(ar, m): 

    return np.convolve(ar, np.ones((m,))/m)[(m-1):] 

a = np.array([1, 3, 4, 5, 15, 14, 16, 13]) 
m = 2 
av = runningMean(a, m) 

d = a[m:] - av[:-m] 

dは、所望の出力が含まれますCleb @

array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ]) 
+0

をあなたの答えをありがとう、私は後でそれが少し混乱した実現。したがって私は私の例を変えました。 – Mapa

+0

@マパ:答えを更新しました。それが今あなたの質問に答えるかどうか私に教えてください。 – Cleb

+1

はい。ありがとうございました。 – Mapa

関連する問題