如何将 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
作为list
的element
[[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))
会将您的 a
和 b
变量转换为字典。不过,我不确定这是否是您要寻找的东西。
【讨论】:
它返回一个错误说 - TypeError: unhashable type: 'numpy.ndarray' 哦,对了,我没有注意到您的a
的确切形式。我假设你的意思是a = np.array([[1],[3]])
。如果是这样,dict(zip(a[:,0], b))
应该这样做。以上是关于如何将 Numpy 数组添加到字典中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 numpy 数组上定义一个使用数组索引查找字典的函数?
将字典保存到文件(numpy 和 Python 2/3 友好)