首页 > 解决方案 > 使用随机列表生成二进制矩阵

问题描述

所以首先这里是我的代码我有疑问,我觉得答案很简单,但我太盲目了,看不到它

dic = {}

for i in range(0,9):
    dic['rand_num{0}'.format(i)] = np.sort(random.sample(range(0,8),5))

mat = np.zeros([8,8])


for rand_num in dic.values():
    print(rand_num)
    for i in range(0,5):
        matrixval = rand_num[i]
        #print(matrixval)
        for j in range(0,8):
            mat[matrixval,j] = 1


print(mat)


我创建了 8 个不同的列表,它们将帮助我确定在矩阵中设置 1 的位置。

所以例如。如果我的第一个列表如下所示:

rand_List = [0,3,5,6,7]

第一行或第一列的矩阵应该是这样的

矩阵 = [1, 0, 0, 1, 0, 1, 1, 1]

我对矩阵值的位置是在第二个循环中设置的:for i in range(0,5): matrixval = rand_num[i]. 但是,一旦我运行我的代码,我的矩阵只会给我一个而不是一个和零。我觉得我的最后一个 for 循环中有一个迭代问题,我不知道如何解决它。

如果有人可以帮助我,或者只是给我一个提示,如何真正解决我这个有希望的小错误,我将不胜感激。

标签: pythonlistnumpyloopsdictionary

解决方案


希望这提供了预期的结果:

dic = {}

for i in range(0,8):
    dic['rand_num{0}'.format(i)] = np.sort(random.sample(range(0,8),5))

mat = np.zeros([8,8])

for j, rand_num in enumerate(dic.values()):
    print(rand_num)
    for i in range(0,5):
        matrixval = rand_num[i]
        mat[j,matrixval] = 1

print(mat)

输出:

[1 2 3 5 7]
[0 1 2 5 6]
[0 1 2 3 5]
[1 2 3 4 6]
[0 1 3 4 7]
[1 2 4 5 7]
[0 1 3 4 7]
[1 2 3 4 6]
[[0. 1. 1. 1. 0. 1. 0. 1.]
 [1. 1. 1. 0. 0. 1. 1. 0.]
 [1. 1. 1. 1. 0. 1. 0. 0.]
 [0. 1. 1. 1. 1. 0. 1. 0.]
 [1. 1. 0. 1. 1. 0. 0. 1.]
 [0. 1. 1. 0. 1. 1. 0. 1.]
 [1. 1. 0. 1. 1. 0. 0. 1.]
 [0. 1. 1. 1. 1. 0. 1. 0.]]

推荐阅读