用numpython元素表示多个矩阵

用numpython元素表示多个矩阵,python,numpy,list-comprehension,mean,sliding-window,Python,Numpy,List Comprehension,Mean,Sliding Window,我正在实现一个滑动窗口模型,其中我想初始化一个矩阵@t,作为前面N个矩阵的元素方式,其中N是窗口大小。 这是我最初的尝试,它显示了最后N个矩阵: 期望的答案是过去N个矩阵的元素平均值。对于上述系列,它是: (数组列表[2]+数组列表[1])/2=[0.7,0.8],[0.9,1.0]] 我应该如何修改答案行上的列表理解以获得所需答案?从t-N到t(含)的元素平均值如下所示: np.mean(list_of_arrays[t-N+1:t+1], axis=0) 从你问题的字里行间可以看出,我认为

我正在实现一个滑动窗口模型,其中我想初始化一个矩阵@
t
,作为前面N个矩阵的元素方式,其中N是窗口大小。 这是我最初的尝试,它显示了最后N个矩阵:

期望的答案是过去N个矩阵的元素平均值。对于上述系列,它是:

(数组列表[2]+数组列表[1])/2=[0.7,0.8],[0.9,1.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)

我想出来了。这是对问题中指示的
答案
行的必要修改:

answer = np.mean([list_of_arrays[t-j] for j in range1(1,N)], axis = 0)
>> array([[ 0.7,  0.8],
>>        [ 0.9,  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]]

谢谢,我需要列表理解,因为矩阵是对象字段,即对象[1]。矩阵,对象[2]。矩阵等。我无法以数组[-N:]的列表形式访问它们。矩阵
。但是我不是Python专家,所以让我知道列表理解是否仍然是可以避免的。列表元素是否与您描述的内容不同?列表元素是包含其中矩阵的对象。因此,我无法直接访问矩阵。换句话说,它是一个由包含矩阵的对象组成的列表。这就是为什么我使用了列表理解(单独访问每个对象的矩阵,然后对它们进行整体处理,正如你的回答中所给出的那样)那么你的问题是错误的?问题是,您描述了一种情况,在这种情况下,列表理解是错误的(非)解决方案。您所指的这些对象是什么?矩阵元素是一个numpy矩阵对象,还是其他什么?你的问题和答案对于每个人来说都是无用的,除了你自己。主要是因为您没有试图表达实际问题是什么。从字里行间可以看出,您似乎在使用numpy数组作为实际对象的概念代理,然后您希望有人告诉您如何执行实际要求之外的操作。请尽一点努力,用一种反映你实际问题的方式来表达你自己,不要以为别人能读懂你的想法。就目前情况而言,这个答案很差,因为这个问题的投票率很低。问题:我应该如何修改答案行上的列表理解才能得到想要的答案?这完全封装了我要寻找的内容。没有什么神秘或误导的。在任何时候,你都不需要了解我的想法。但是,你接着说“对于上面的系列,它是……”,然后提出一些最明显不是你所说的你想要的东西。如果您正在处理您描述的numpy数组,那么您不需要列表理解(事实上,这是一个非常糟糕的答案)。如果你正在处理其他事情,那么写下问题来反映这一点。你的列表理解在你的答案中只是一个切片器。@HenryGomersall你错得再错不过了。我只是在我自己的项目中使用了这个答案,它很有用。像你这样认真对待stackexchange适度性的人,是伟大人物被禁止的原因。@DLV对你有好处。对于一个糟糕的问题,这仍然是一个糟糕的答案,但如果您想在代码中实现它,请不要让我阻止您。在上面的答案中,列表理解是完全多余的(用数组[-N:://code>的
list\u替换)。问题是,不清楚这是否足以解决一般问题。解决编程问题的方法有很多,但大多数都不好。在这种情况下,专注于列表理解会导致给出问题的糟糕解决方案,即使它有效。而且,“像我这样的人”修复了问题代码中的实际错误。
(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]]