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

5
如何在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)}

解决方案必须具备可扩展性吗? - Joe Iddon
是的,必须这样。 - vulcanrs
3个回答

5

c = dict(zip(a[:,0], b)) 会将你的变量 ab 转换成字典。我不确定这是否符合您的要求。


它返回一个错误,说 - TypeError: 不可哈希类型:'numpy.ndarray' - vulcanrs
哦,对了,我没有注意到你的a的确切形式。我猜你的意思是 a = np.array([[1],[3]])。如果是这样的话,dict(zip(a[:,0], b)) 就可以了。 - Dominik Stańczak

2

使用字典生成式:

我假设您的意思是要将 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)}

如果你实际上只有一个元素的列表,例如[[1], [3]],你可以这样做:
a = [i[0] for i in a]
#[[1], [3]] --> [1, 3]

仍然出现错误 TypeError: unhashable type: 'numpy.ndarray' - vulcanrs
非常抱歉,完美运行!!我在输入您的代码时犯了一个错误。 - vulcanrs

0

在 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中的相应位置相对应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接