用随机列表产生二进制矩阵

时间:2019-11-20 16:18:16

标签: python loops matrix

所以首先这是我有疑问的代码,我觉得答案很简单,但是我实在太盲目了

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循环中有一个迭代问题,我不知道如何解决。

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

最佳 阿里

2 个答案:

答案 0 :(得分:0)

希望这可以提供预期的结果:

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.]]

答案 1 :(得分:0)

不需要您使用的dic。这是没有它的解决方案。

import random

lists = []
for i in range(0, 9):
    lists.append(sorted(random.sample(range(0, 8), 5)))

mat = []
for lst in lists:
    arr = [0] * 8

    for index in lst:
        arr[index] = 1

    mat.append(arr)

print(mat)

输出:

[[0, 1, 1, 0, 0, 1, 1, 1],
 [1, 0, 1, 1, 0, 0, 1, 1],
 [1, 1, 1, 1, 0, 0, 0, 1],
 [0, 1, 1, 1, 0, 1, 1, 0],
 [1, 1, 0, 1, 1, 0, 1, 0],
 [1, 0, 1, 1, 0, 1, 1, 0],
 [0, 1, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 0, 1, 1, 1, 0],
 [1, 0, 1, 0, 1, 0, 1, 1]]

您还可以使用numpy.random.randint生成二进制2d数组。

import numpy as np

arr = np.random.randint(2, size=(8, 8))
print(arr)

输出:

[[1 0 1 0 1 0 1 1]
 [0 0 0 0 1 0 1 1]
 [1 0 1 1 0 0 1 1]
 [1 1 0 1 0 1 1 0]
 [0 0 1 0 0 1 1 1]
 [1 0 0 0 1 1 1 1]
 [1 1 0 1 0 0 1 1]
 [1 0 1 0 0 1 0 0]]