用于dict的python 2d数组

时间:2012-03-03 09:55:15

标签: python arrays dictionary numpy 2d

我想从表示为2d数组的对称矩阵的下三角形创建一个dict。例如,如果numpy数组是;

array([[0, 2, 3],
       [2, 0, 4],
       [3, 4, 0]])

然后我希望dict看起来像;

{('1', '0'): 2, ('2', '0'): 3, ('2', '1'): 4}

矢量有一个类似的帖子;

Fastest way to convert a Numpy array into a sparse dictionary?

我对python相对较新,所以任何帮助/建议都表示赞赏。

2 个答案:

答案 0 :(得分:7)

>>> arr =[[0, 2, 3],
          [2, 0, 4],
          [3, 4, 0]]
>>> dict(((j,i), arr[i][j]) for i in range(len(arr)) for j in range(len(arr[0])) if i<j)
{(2, 0): 3, (1, 0): 2, (2, 1): 4}

答案 1 :(得分:1)

一种方法是使用ndenumeratedefaultdict

构建一个dict,将每个值映射到其所有位置:

>>> d = defaultdict(list)
>>> for pos,val in numpy.ndenumerate(a):
...     if val:
...         d[val].append(pos[1])
... 
>>> d
defaultdict(<class 'list'>, {2: [1, 0], 3: [2, 0], 4: [2, 1]})

然后反转键和值:

>>> {tuple(v):k for k,v in d.items()}
{(2, 0): 3, (1, 0): 2, (2, 1): 4}

如果你的python版本不支持dict comprhension,那么最后一部分可能是:

>>> dict((tuple(v),k) for k,v in d.iteritems())
{(2, 0): 3, (1, 0): 2, (2, 1): 4}