簡體   English   中英

使用對象值的 Numpy 數組

[英]Numpy array using values of an object

我有一個對象 -> {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()])

keysitemsvalues是從字典中獲取“東西”的最快方法。 否則,您必須對鍵進行迭代。 允許跳過索引和無序索引的通用方法:

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, 1: 0.2, 2: 0, 3: 0}
np_array = np.array(list(d.values()))

字典本質上是無序的。 您需要根據您的鍵對您的值進行排序(假設您的字典中沒有丟失的鍵):

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]

如果輸入 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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM