4

tスライディング ウィンドウ モデルを実装しています。ここでは、前の N 行列の要素ごとの平均として行列 @ を初期化します。N はウィンドウ サイズです。これは私の最初の試みで、最後の N 個の行列を表示します。

list_of_arrays = [np.array([]) for i in range(3)]
N=2 # window size
# past 3 matrices
list_of_arrays[0] = np.array([[0.1,0.2],[0.3,0.4]])
list_of_arrays[1] = np.array([[0.5,0.6],[0.7,0.8]])
list_of_arrays[2] = np.array([[0.9,1.0],[1.1,1.2]])

# at t=3, get element-wise means of previous N matrices
t=3
range1 = lambda start, end: range(start, end+1) # modified range function
answer = [list_of_arrays[t-j] for j in range1(1,N)]

望ましい答えは、過去の N 行列の要素ごとの平均です。上記のシリーズの場合、次のとおりです。

(list_of_arrays[2]+list_of_arrays[1]) / 2 = [[0.7,0.8],[0.9,1.0]]

answer目的の回答を得るには、行のリスト内包表記をどのように変更すればよいですか?

4

3 に答える 3

3

私はそれを考え出した。answerこれは、質問で示された行に必要な変更です。

answer = np.mean([list_of_arrays[t-j] for j in range1(1,N)], axis = 0)
>> array([[ 0.7,  0.8],
>>        [ 0.9,  1. ]])
于 2013-09-16T12:44:41.490 に答える
2

これが別の答えです。

N = 3 # window size
m = np.array([
        [[0, 10], 
         [0, 0]], 
        [[0, 0], 
         [1, 1.]],
        [[0, 0], 
         [0, 1.]],
        [[0, 5], 
         [0, 0]],
        [[0, 10], 
         [0, 0]]])
print m.shape
for t in range(m.shape[0]-N):
    print '\nwindow:', t, 'to', t+N-1
    print m[t:t+N,:,:].shape
    print m[t:t+N,:,:].sum(axis=0)/(N)

出力は

(5, 2, 2)

window 0 to 2
(3, 2, 2)
[[ 0.          3.33333333]
 [ 0.33333333  0.66666667]]

window: 1 to 3
(3, 2, 2)
[[ 0.          1.66666667]
 [ 0.33333333  0.66666667]]
于 2015-08-13T23:38:22.283 に答える
0

t-Nto t(包括的)の要素ごとの平均は、次の式で与えられます。

np.mean(list_of_arrays[t-N+1:t+1], axis=0)

あなたの質問の行間を読んで、平均を取る前に他の変更を行いたいと思います。リストにnumpy配列を含むオブジェクトが含まれていると仮定すると(.matrixコメントで提案したように属性として)、リスト内包表記は関連する部分を抽出できるため、上記を次のように変更します。

np.mean([a.matrix for a in list_of_arrays[t-N+1:t+1]], axis=0)
于 2013-09-16T12:03:15.073 に答える