为了账号安全,请及时绑定邮箱和手机立即绑定

使用对象值的 Numpy 数组

使用对象值的 Numpy 数组

白衣染霜花 2023-06-27 17:32:46
我有一个对象 -> {0: 0.8, 1: 0.2, 2: 0, 3: 0}我想将其转换为 numpy 数组,其中键是索引,值是数组的值 -> [0.8, 0.2, 0, 0]最快、最有效的方法是什么?我正在使用 for 循环,但是有更好的方法吗?
查看完整描述

5 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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. ])


查看完整回答
反对 回复 2023-06-27
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

假设你的字典叫做dict

numpy_array = np.array([*dict.values()])


查看完整回答
反对 回复 2023-06-27
?
波斯汪

TA贡献1811条经验 获得超4个赞

如果输入字典未排序或缺少值的解决方案:


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])


查看完整回答
反对 回复 2023-06-27
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

字典本质上是无序的。您需要根据键对值进行排序(假设您的字典中没有丢失的键):


a = {0: 0.8, 1: 0.2, 2: 0, 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.2, 0, 0]


查看完整回答
反对 回复 2023-06-27
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

上面的答案给出了 dict_values,但方向正确


正确的方法是:


d = {0: 0.8, 1: 0.2, 2: 0, 3: 0}

np_array = np.array(list(d.values()))


查看完整回答
反对 回复 2023-06-27
  • 5 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信