簡體   English   中英

將兩個numpy數組合並到元組列表的列表中

[英]Merge two numpy arrays into a list of lists of tuples

我還沒弄清楚。 謝謝你的幫助:

有:

>>> x = np.array([[1,2],[5,6]])
>>> x
array([[1, 2],
       [5, 6]])
>>> y = np.array([[3,4],[7,8]])
>>> y
array([[3, 4],
       [7, 8]])

想:

>>> z = [[(1,2),(3,4)],[(5,6),(7,8)]]
>>> z
[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

嘗試這個:

x_z = map(tuple,x)
y_z = map(tuple,y)
[list(i) for i in zip(x_z, y_z)]

輸出:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

這是一個有趣的問題。 這是我想出的:

print([list(map(tuple, i)) for i in zip(x, y)])
# [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

基本上,將x和y壓縮會得到:

[(array([1, 2]), array([3, 4])), (array([5, 6]), array([7, 8])]

然后將每個元素先轉換為列表,然后轉換為元組

如果要遍歷每個矩陣的行,可以執行以下操作:

for (row1, row2) in zip(x,y):
    yield [tuple(row1), tuple(row2)]
       #  [ (1,2)     ,  (3,4)     ]

這將為您提供一個生成器(如果將其包裝在函數中),但是您需要一個列表。 因此,將其包裝成一個理解:

[ [tuple(row1),tuple(row2)] for (row1, row2) in zip(x,y) ]
x = list([[1,2],[5,6]])
y = list([[3,4],[7,8]])
x
[[1, 2], [5, 6]]
y
[[3, 4], [7, 8]]
z=list(zip(x,y))
z
[([1, 2], [3, 4]), ([5, 6], [7, 8])]

IIUC

z=np.array([x,y])
[list(map(tuple,z[:,x]))for x in range(len(x))]
Out[223]: [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

對於它的價值,這是最簡單,最有效 (但可能是最不通用)的解決方案:

result = [[(x[0,0], x[0,1]), (y[0,0], y[0,1])],
         [(x[1,0], x[1,1]), (y[1,0], y[1,1])]]

輸出:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

誠然,它不能泛化,但問題是-泛化需要朝哪個方向? 更長的外部尺寸? 內部尺寸更長? 這個問題沒有要求任何概括。

根據明確規定的要求,當然可以修改此解決方案以使其根據需要進行概括。

暫無
暫無

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

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