2017-07-13 52 views
-2

我有以下問題,我希望有人可以幫助我在這裏: 我有一個元組作爲關鍵字d = {(1,2):1,( 2,1):1,(1,3):1,(3,1):1,(2,3):1,(3,2):1,(1,4):1,(4, 1):1,(2,4):1,(4,2):1,(3,4):1,(4,3):1} 現在,我想創建一個合適的矩陣到四行四列的元組。在我的頭上,我想它喜歡這個(抱歉,如果這似乎有點亂):從元組鍵的字典創建一個稀疏矩陣

1 2 3 4 

1:0 1 1 1

2:1 0 1 1

3:1 0 1

4:1 1 1 0

當四個數字一頂部(1 2 3 4)表示對應於該號碼的元組中的列和同樣爲左邊的數字(從上到下 1 2 3 4)爲行。

輸出應該是這樣的:

array([[0, 1, 1, 1], 
    [1, 0, 1, 1], 
    [1, 1, 0, 1], 
    [1, 1, 1, 0]]) 

不幸的是,我完全不知道如何從我的頭上稀疏矩陣到一個正確的代碼(蟒蛇3),好像我到達儘管我確信必須有一個簡單的答案。 如果有人能幫助我,我會很感激。 在此先感謝

+1

SO不是一個編碼服務。從一些編碼開始。社區會幫助你,但這不是爲你解決問題。這個問題可能會導致downvotes。 – Matyas

+0

你是什麼意思?我真的有一個問題,我覺得我自己無法解決,即使我的生命依賴於它。開始一些編碼?我會很樂意發佈與問題相關的整個代碼,如果這就是你的意思。 – ismael68

回答

0

一個單行的解決方案,假設你想與0的在地的字典沒有規定填寫您的數組:

np.asarray([[(d[(x,y)] if (x,y) in d else 0) for y in range(1,5)] for x in range(1,5)]) 

輸出:

array([[0, 1, 1, 1], 
     [1, 0, 1, 1], 
     [1, 1, 0, 1], 
     [1, 1, 1, 0]]) 

更費力但可能更容易理解的方法是初始化一個空的零數組,然後遍歷它,並在詞典中出現的每個位置替換0。

+0

非常感謝。非常簡單,完美無瑕。我知道必須有一個簡單的解決方案,但由於某種原因,它避開了我;) – ismael68

+0

很高興提供幫助。如果答案對你有幫助,請接受。 – perigon