簡體   English   中英

解壓縮坐標和值的字典

[英]unzip a dictionary of coordinates and values

我希望填充值xyz ,其中x是x坐標, y是y坐標, z是每個坐標的關聯值,由p定義。 我是這樣做的:

p = {(1,2): 10, (0,2):12, (2,0):11}
k,z = np.array(list(zip(*p.items())))
x,y = np.array(list(zip(*k)))

還有另一種更易讀的方式嗎? 這可能是numpy或scipy有什么用呢?

為什么z導致array([10, 11, 12], dtype=object) ,而xy不包括dtype=object

作為一個班輪怎么樣?

x, y, z = np.array([(x, y, z) for (x, y), z in p.items()]).T

這樣可以更清楚地顯示值的來源,而不需要不必要的和未使用的k 此外,你不應該有這個問題的dtype問題。

為什么dtype = object?

考慮第二行,現在只有一個變量賦值:

w = np.array(list(zip(*p.items())))
print(w)

這里, w成為由一行元組和一行整數組成的數組。 每當涉及這種混合類型時,都使用通用object數據類型( dtype )。 在你的代碼中,你實際上有k, z = w ,所以即使int存儲在z ,它們也會保留它們的dtypeobject )。

更干凈的方式

在一行中我們可以做到

x, y, z = np.array([(x, y, z) for (x, y), z in p.items()]).T

這里,生成存儲形式(x, y, z)元組的列表。 然后將其轉換為2D NumPy數組。 最后,將該數組(或矩陣)轉置( .T ),然后分配給xyz 否則需要換位,矩陣的行將分配給xyz (嘗試省略.T並自己查看效果)。

如果您使用Pandas,解決方案將非常易讀:

import pandas as pd
data = pd.Series(p)
#0  2    12
#1  2    10
#2  0    11

如果最終你想要numpy數組:

x = data.reset_index()['level_0'].values
y = data.reset_index()['level_1'].values
z = data.values

既然我喜歡numpy,我會選擇以下內容:

keys = np.array(list(p.keys()))
vals = np.matrix(list(p.values()))
comb = np.concatenate((keys, vals.T), axis=1)
x, y, z = comb.T

可讀性取決於如何習慣numpy。

那里有兩個技巧。 首先,如果字典沒有改變,字典項的排序不會改變,所以我們可以分別調用鍵和值。 第二種是使用np.matrix作為值,以便轉置起作用,因為在numpy中轉換1D數組是一個nop。

暫無
暫無

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

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