Python:正确地迭代numpy数组字典

Python:正确地迭代numpy数组字典,python,arrays,numpy,dictionary,for-loop,Python,Arrays,Numpy,Dictionary,For Loop,给定以下numpy数组: import numpy a=numpy.array([[1,1,1],[1,1,1],[1,1,1]]) b=numpy.array([[2,2,2],[2,2,2],[2,2,2]]) c=numpy.array([[3,3,3],[3,3,3],[3,3,3]]) 这本字典包含了所有这些: mydict={0:a,1:b,2:c} 迭代mydict以计算(1+2+3)/3=2作为值的平均numpy数组的最有效方法是什么 我的尝试失败了,因为我给了它太多的值来解

给定以下
numpy
数组:

import numpy
a=numpy.array([[1,1,1],[1,1,1],[1,1,1]])
b=numpy.array([[2,2,2],[2,2,2],[2,2,2]])
c=numpy.array([[3,3,3],[3,3,3],[3,3,3]])
这本字典包含了所有这些:

mydict={0:a,1:b,2:c}
迭代
mydict
以计算
(1+2+3)/3=2作为值的平均numpy数组的最有效方法是什么

我的尝试失败了,因为我给了它太多的值来解包。它的效率也非常低,因为它的时间复杂度为
O(n^3)

aver=numpy.empty([a.shape[0],a.shape[1]])

for c,v in mydict.values():
    for i in range(0,a.shape[0]):
        for j in range(0,a.shape[1]):
            aver[i][j]=mydict[c][i][j] #<-too many values to unpack
编辑


我不是在寻找每个numpy数组的平均值。我正在寻找我的numpy数组集合中每个元素的平均值。这是一个很小的例子,但我正在处理的实际问题是每个数组有120000多个元素,对于同一位置,值会随着数组的变化而变化

我觉得你让事情变得更难了。求和并除以项数:

In [42]: v = mydict.values()

In [43]: sum(v) / len(v)
Out[43]: 
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
或者将它们叠加到一个大数组中——听起来像是它们开始时应该采用的格式——然后取叠加轴上的平均值:

In [44]: np.array(list(v)).mean(axis=0)
Out[44]: 
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])

我觉得你让事情变得更难了。求和并除以项数:

In [42]: v = mydict.values()

In [43]: sum(v) / len(v)
Out[43]: 
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
或者将它们叠加到一个大数组中——听起来像是它们开始时应该采用的格式——然后取叠加轴上的平均值:

In [44]: np.array(list(v)).mean(axis=0)
Out[44]: 
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])

你真的不应该使用
numpy.array
s的
dict
。只需使用多维数组:

>>> bigarray  = numpy.array([arr.tolist() for arr in mydict.values()])
>>> bigarray
array([[[1, 1, 1],
        [1, 1, 1],
        [1, 1, 1]],

       [[2, 2, 2],
        [2, 2, 2],
        [2, 2, 2]],

       [[3, 3, 3],
        [3, 3, 3],
        [3, 3, 3]]])
>>> bigarray.mean(axis=0)
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
>>>

您应该修改您的代码,使其不使用
dict
。尤其不是带有整数键的
dict

你真的不应该使用
numpy.array的
dict
。只需使用多维数组:

>>> bigarray  = numpy.array([arr.tolist() for arr in mydict.values()])
>>> bigarray
array([[[1, 1, 1],
        [1, 1, 1],
        [1, 1, 1]],

       [[2, 2, 2],
        [2, 2, 2],
        [2, 2, 2]],

       [[3, 3, 3],
        [3, 3, 3],
        [3, 3, 3]]])
>>> bigarray.mean(axis=0)
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
>>>


您应该修改您的代码,使其不使用
dict
。尤其不是带整数键的
dict…

在mydict.values()中c,v的值:
应该是
在mydict.items()中c,v的值:
@JamesR对这一点很有眼光:)我想你只是想要类似于
arr.mean(axis=1)
的东西,你到底在找什么?你的产出是多少?为什么这些数组在字典里?说来话长。气候数据…
对于mydict.values()中的c,v:
应该是
对于mydict.items()中的c,v:
@JamesR很好地注意到了这一点:)我想你只是想要类似于
arr.mean(axis=1)
的东西,你到底在找什么?你的产出是多少?为什么这些数组在字典里?说来话长。气候数据…你的第一个答案给了我一个错误<代码>类型错误:不支持/:“dict_values”和“int”的操作数类型。
@kmario23:该错误消息表示左侧操作数是dict_values实例。但是
sum(v)
的结果在这里不应该是dict_values对象,所以我不确定您在做什么。我正在尝试执行以下两个步骤:
v=mydict.values()
然后是
sum(v)/len(v)
mydict
,如OP所定义。实际上,
sum(v)
返回一个类型
dict_values
@kmario23:哦,你可能做了一些危险的事情,比如从numpy import*
或者其他什么(或者在某些环境中操作,它们也做了同样的事情)。如果您使用
numpy.sum
而不是
sum
,则会出现该错误。@kmario23:您的困难与此问题或答案无关,而是与您使用的环境已损坏有关。我们必须更新一半的问题,以便使用
sum
any
all
min
max
或从numpy导入的星号将用不同版本覆盖的任何内置函数。您的第一个答案是给我一个错误<代码>类型错误:不支持/:“dict_values”和“int”的操作数类型。
@kmario23:该错误消息表示左侧操作数是dict_values实例。但是
sum(v)
的结果在这里不应该是dict_values对象,所以我不确定您在做什么。我正在尝试执行以下两个步骤:
v=mydict.values()
然后是
sum(v)/len(v)
mydict
,如OP所定义。实际上,
sum(v)
返回一个类型
dict_values
@kmario23:哦,你可能做了一些危险的事情,比如从numpy import*或者其他什么(或者在某些环境中操作,它们也做了同样的事情)。如果您使用
numpy.sum
而不是
sum
,则会出现该错误。@kmario23:您的困难与此问题或答案无关,而是与您使用的环境已损坏有关。我们必须更新一半的问题,以便使用
sum
any
all
min
max
或从numpy导入的星号将用不同版本覆盖的任何内置函数。