如何使用以下某些给定条件创建二进制矩阵:

时间:2018-04-24 11:26:50

标签: python list for-loop matrix tuples

对于元素取自范围(n)的元组L的给定列表,我想以下列方式创建一个n阶二进制矩阵A:

If (i,j)  or (j,i) in L then A[i][j]=1 otherwise A[i][j]=0.    

让我们考虑以下例子:

L=[(2,3),(0,1),(1,3),(2,0),(0,3)]
A=[[0]*4]*4
for i in range(4):
    for j in range(4):
        if (i,j) or (j,i) in L:
            A[i][j]=1
        else:
            A[i][j]=0

print A

该程序未给出准确的结果。逻辑错误发生在哪里?

2 个答案:

答案 0 :(得分:1)

您应该使用第三方库numpy进行矩阵计算。

列表的列表对于数值数组来说是低效的。

import numpy as np

L = [(2,3),(0,1),(1,3),(2,0),(0,3)]

A = np.zeros((4, 4))

idx = np.r_[L].T
A[idx[0], idx[1]] = 1

结果:

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

相关:Why NumPy instead of Python lists?

答案 1 :(得分:0)

根据Aran-Fey的更正,答案是:

L=[(2,3),(0,1),(1,3),(2,0),(0,3)]
#A=[[0]*4]*4
A=[[0]*4 for _ in range(4)]
for i in range(4):
    for j in range(4):
        if (i,j) in L or (j,i) in L:
            A[i][j]=1
        else:
            A[i][j]=0

print A