如何将 Numpy 数组添加到字典中

Posted

技术标签:

【中文标题】如何将 Numpy 数组添加到字典中【英文标题】:How to add a Numpy Array to a dictionary 【发布时间】:2018-04-25 10:39:45 【问题描述】:

如何在python中将两个numpy数组添加到字典中?

a = [[1]
     [3]]

b = [array([[[ 41.,  179.],
             [ 451.,  254.],
             [ 449.,  10.],
             [ 53.,  256.]]], dtype=float32), array([[[ 181.,  313.],
             [  27.,  24.],
             [ 113.,  192.],
             [ 08.,  20.]]], dtype=float32)]

我希望将 a 和 b 显示为

c = 1: array([[ 41.,  179.],
            [ 451.,  254.],
            [ 449.,  10.],
            [ 53.,  256.]], dtype=float32),
     3: array([[ 181.,  313.],
           [  27.,  24.],
           [ 113.,  192.],
           [ 08.,  20.]], dtype=float32)

【问题讨论】:

解决方案是否必须具有可扩展性? 是的,必须如此。 【参考方案1】:

c 中的小错误,两个内部列表之间需要逗号(这里需要嵌套列表吗?)

无论如何,这里有一个解决方案,可以提供您想要的输出。

import numpy as np
c = 

a = [[1],[3]]

b = [np.array([[[ 41.,  179.],
             [ 451.,  254.],
             [ 449.,  10.],
             [ 53.,  256.]]], dtype=np.float32), np.array([[[ 181.,  313.],
             [  27.,  24.],
             [ 113.,  192.],
             [ 08.,  20.]]], dtype=np.float32)]

for i in range(len(a)):
    c[a[i][0]] = b[i]

首先创建一个字典 (c),然后使用嵌套列表 a 中的值作为键。对于这些键中的每一个,将列表 b 中的数组分配到相同的索引 (i) 处。请注意,这要求 a 的索引对应于 b 中的相同位置。

【讨论】:

【参考方案2】:

使用dictionary comprehension

我假设您打算将a 定义为:

a = [1, 3]

那么您可以通过以下方式获得c

c = e: b[i] for i, e in enumerate(a)

它给出了预期的输出:

1: array([[[  41.,  179.],
    [ 451.,  254.],
    [ 449.,   10.],
    [  53.,  256.]]], dtype=float32),
 3: array([[[ 181.,  313.],
    [  27.,   24.],
    [ 113.,  192.],
    [   8.,   20.]]], dtype=float32)

如果您实际上只有a 作为listelement [[1], [3]],您可以这样做:

a = [i[0] for i in a]
#[[1], [3]] --> [1, 3]

【讨论】:

仍然报错TypeError: unhashable type: 'numpy.ndarray' 对不起,完美!输入您的代码时出错。【参考方案3】:

c = dict(zip(a[:,0], b)) 会将您的 ab 变量转换为字典。不过,我不确定这是否是您要寻找的东西。

【讨论】:

它返回一个错误说 - TypeError: unhashable type: 'numpy.ndarray' 哦,对了,我没有注意到您的a 的确切形式。我假设你的意思是a = np.array([[1],[3]])。如果是这样,dict(zip(a[:,0], b)) 应该这样做。

以上是关于如何将 Numpy 数组添加到字典中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 numpy 数组上定义一个使用数组索引查找字典的函数?

将字典保存到文件(numpy 和 Python 2/3 友好)

如何将字典数据添加到数组中?

如何将数组中键的值添加到字典中? [关闭]

如何使用 insertRowsAtIndexPaths 将数组内的字典添加到 UItableview?

如何重新创建“索引超出数组范围”将项目添加到字典?