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

2024-09-30 18:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下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]])

这本词典包含了所有这些:

^{pr2}$

迭代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

最终结果应为:

In[17]: aver
Out[17]: 
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])

编辑

我不是在寻找每个numpy数组的平均值。我在寻找我的numpy数组的每个元素的平均值。这是一个最小的例子,但是我正在研究的实际情况是每个数组有超过120000个元素,并且对于同一个位置,值会随着数组的不同而变化。在


Tags: inimportnumpy元素forrange数组array
2条回答

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

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

In [43]: sum(v) / len(v)
Out[43]: 
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])

或者把它们叠成一个大数组,听起来像是它们应该开始时使用的格式,然后取叠加轴上的平均值:

^{pr2}$

您真的不应该使用dictdict。只需使用多维数组:

>>> 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。。。在

相关问题 更多 >