【问题标题】:Numpy array using values of an object使用对象值的 Numpy 数组
【发布时间】:2020-12-16 18:05:58
【问题描述】:
我有一个对象 -> {0: 0.8, 1: 0.2, 2: 0, 3: 0}
我想将它转换为一个numpy数组,其中键是索引,值是数组的值-> [0.8, 0.2, 0, 0]
什么是最快和最有效的方法?
我正在使用 for 循环,但有更好的方法吗?
【问题讨论】:
标签:
python
arrays
numpy
object
type-conversion
【解决方案1】:
输入 dict 未排序或缺少值时的解决方案:
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])
【解决方案2】:
字典本质上是无序的。您需要根据您的键对值进行排序(假设您的字典中没有缺少键):
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]
【解决方案3】:
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. ])
【解决方案4】:
上面的答案给出了dict_values,但方向正确
正确的做法是:
d = {0: 0.8, 1: 0.2, 2: 0, 3: 0}
np_array = np.array(list(d.values()))
【解决方案5】:
假设您的字典名为dict:
numpy_array = np.array([*dict.values()])