我正在实现一个滑动窗口模型,我希望初始化矩阵@ 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
行上的列表理解以获得所需的答案?
答案 0 :(得分:1)
我明白了。这是对问题中指示的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. ]])
答案 1 :(得分:1)
这是另一个答案。
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]]
答案 2 :(得分:0)
t-N
到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)