簡體   English   中英

如何從二維numpy數組中獲取對應的值

[英]How to grab corresponding values from two-dimensional numpy array

我有一個二維數組

[[ 1,  4,  4,  6,  6,  6,  8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 11, 11, 11, 11, 11], 
[ 0,  0,  1,  0,  1,  4,  0,  1,  4,  6,  0,  1,  4,  6,  8,  5,  0,  1,  4,  6,  8]]

我試圖以這樣的方式解析它,最終得到如下所示的輸出。 不必是字典,但為了可視化,我正在使用類似的東西。 查找第一個數組中每個唯一值的第二個坐標。

{
1: [0],
4: [0,1],
6: [0,1,4],
8: [0,1,4,6],
9: [0,1,4,6,8]
}

1 只有一秒坐標,0 4 有匹配的坐標 0 和 1 等。

有什么想法嗎?

謝謝!

更新

使用 Python:

from itertools import groupby

lst = [[1, 4, 4, 6, 6, 6, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 11, 11, 11, 11, 11],
       [0, 0, 1, 0, 1, 4, 0, 1, 4, 6, 0, 1, 4, 6, 8, 5, 0, 1, 4, 6, 8]]

# Dict version
out = {k: [v[1] for v in l] for k, l in groupby(zip(*lst), key=lambda x: x[0])}
print(out)

# Output
{1: [0],
 4: [0, 1],
 6: [0, 1, 4],
 8: [0, 1, 4, 6],
 9: [0, 1, 4, 6, 8],
 10: [5],
 11: [0, 1, 4, 6, 8]}

# List version
out = [[v[1] for v in l] for k, l in groupby(zip(*lst), key=lambda x: x[0])]

舊答案

使用熊貓:

lst = [[1, 4, 4, 6, 6, 6, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 11, 11, 11, 11, 11],
       [0, 0, 1, 0, 1, 4, 0, 1, 4, 6, 0, 1, 4, 6, 8, 5, 0, 1, 4, 6, 8]]

df = pd.DataFrame(lst).T

# Dict version
out = df.groupby(0)[1].agg(list).to_dict()
print(out)

# Output
{1: [0],
 4: [0, 1],
 6: [0, 1, 4],
 8: [0, 1, 4, 6],
 9: [0, 1, 4, 6, 8],
 10: [5],
 11: [0, 1, 4, 6, 8]}

# List version
out = df.groupby(0)[1].agg(list).to_list()

以下代碼似乎符合您的輸出偏好。

代碼:

val_list = [
  [ 1,  4,  4,  6,  6,  6,  8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 11, 11, 11, 11, 11],
  [ 0,  0,  1,  0,  1,  4,  0,  1,  4,  6,  0,  1,  4,  6,  8,  5,  0,  1,  4,  6,  8]
]

val_dict = {}
for i, j in zip(val_list[0], val_list[1]):
  if i in val_dict:
    val_dict[i].append(j)
  else:
    val_dict[i] = [j]

print(val_dict)

輸出:

{1: [0], 4: [0, 1], 6: [0, 1, 4], 8: [0, 1, 4, 6], 9: [0, 1, 4, 6, 8], 10: [5], 11: [0, 1, 4, 6, 8]}

暫無
暫無

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

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