如何解决使用对象值的numpy数组
我有一个对象-> {0:0.8,1:0.2,2:0,3:0}
我想将其转换为一个numpy数组,其中键是索引,值是数组的值-> [0.8,0.2,0,0]
最快,最有效的方法是什么?
我正在使用for循环,但是有更好的方法吗?
解决方法
假设您的字典称为dict
:
numpy_array = np.array([*dict.values()])
,
keys
,items
和values
是从字典中获取“事物”的最快方法。否则,您必须迭代键。允许跳过索引和乱序索引的通用方法:
In [81]: adict = {0: 0.8,1: 0.2,2: 0,3: 0}
In [82]: keys = list(adict.keys())
In [83]: arr = np.zeros(max(keys)+1) # or set your own size
In [84]: arr[keys] = list(adict.values())
In [85]: arr
Out[85]: array([0.8,0.2,0.,0. ])
,
以上答案给出了dict_values,但方向正确
正确的方法是:
d = {0: 0.8,3: 0}
np_array = np.array(list(d.values()))
,
词典本质上是无序的。您需要根据键对值进行排序(假设字典中没有丢失的键):
a = {0: 0.8,3: 0}
np.array([i[1] for i in sorted(a.items(),key=lambda x:x[0])])
另一种实现方法是按numpy排序:
b = np.array(list(a.items()))
b[b[:,0].argsort()][:,1]
输出:
[0.8,0]
,
输入字典未排序或缺少值的解决方案:
d = {1:1.1,2:2.2,0: 0.8,4:4.4}
sz = 1+max(d.keys()) # or len(d) if you are sure there are no missing values
x = np.full(sz,np.nan)
x[list(d.keys())] = list(d.values())
x
#array([0.8,1.1,2.2,nan,4.4])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。