![](/img/trans.png)
[英]How can I check if one two-dimensional NumPy array contains a specific pattern of values inside it?
[英]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.