除了一个之外,在python dict中对值进行求和

时间:2012-07-30 09:39:31

标签: python dictionary numpy sum

有没有办法在python dict中对所有值求和,除了使用

中的选择器
>>> x = dict(a=1, b=2, c=3)
>>> np.sum(x.values())
6

? 我目前的解决方案是基于循环的解决方案:

>>> x = dict(a=1, b=2, c=3)
>>> y = 0
>>> for i in x:
...     if 'a' != i:
...             y += x[i]
... 
>>> y
5

编辑:

import numpy as np
from scipy.sparse import *
x = dict(a=csr_matrix(np.array([1,0,0,0,0,0,0,0,0]).reshape(3,3)),      b=csr_matrix(np.array([0,0,0,0,0,0,0,0,1]).reshape(3,3)), c=csr_matrix(np.array([0,0,0,0,0,0,0,0,1]).reshape(3,3)))
y = csr_matrix((3,3))
for i in x: 
    if 'a' != i:
        y = y + x[i]
print y

返回(2, 2) 2.0

print np.sum(value for key, value in x.iteritems() if key != 'a')

加注

File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-    packages/numpy/core/fromnumeric.py", line 1446, in sum
    res = _sum_(a)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 187, in __radd__
    return self.__add__(other)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 173, in __add__
    raise NotImplementedError('adding a scalar to a CSC or CSR '
NotImplementedError: adding a scalar to a CSC or CSR matrix is not supported

3 个答案:

答案 0 :(得分:7)

您可以遍历dict以为sum方法创建生成器:

np.sum(value for key, value in x.iteritems() if key != 'a')

答案 1 :(得分:4)

尝试:

np.sum(x.values()) - x['a']

答案 2 :(得分:2)

您需要为sum方法提供累加器或初始值:

sum((value for key, value in x.iteritems() if key != 'a'), csr_matrix((3, 3)))

请注意,这是使用内置sum方法。它与基于循环的解决方案几乎完全相同。

使用np.sum将无效,因为np.sum未传递out参数,无论如何都是为密集矩阵设计的。

np.sum((value for key, value in x.iteritems() if key != 'a'),
       out=csr_matrix((3, 3)))    # doesn't work