对于元素取自范围(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
该程序未给出准确的结果。逻辑错误发生在哪里?
答案 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.]])
答案 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