2017-07-13 53 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