Создание блока случайных чисел 0 и 1 - PullRequest
0 голосов
/ 03 декабря 2018
        import random

        a = [0]
        b = [1]

        for row in range(1):
            for colum in range(5):
                random.shuffle(a and b)
                print (" ".join( repr(e) for e in a + b[:5]))

Привет, ребята,

Итак, я пытаюсь создать матрицу 5 x 5, заполненную 1 или 0, однако, мне трудно это сделать.Я попробовал использовать приведенный выше код, но безрезультатно.Я новичок в программировании на Python, так что будьте осторожны, ха-ха.

Это желаемый результат: (В матрице должно быть МИНИМУМ не менее 10 единиц. Любая идея, как это сделать?

        0 1 1 1 1
        0 1 1 0 0
        0 1 1 0 1 
        1 1 0 1 1
        1 1 1 1 1 

Любой совет будет очень, высоко ценится. Спасибо! :)

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

Вы можете начать с получения случайного числа от 10 до 25 и создать список с таким количеством 1, за которым следует достаточно 0, чтобы получить 25.

import random
ones = random.randint(10, 25)
l = [1] * ones + [0] * (25-ones)

[1] * ones создает список с ones 1 х.[0] * (25-ones) создает список с оставшимися 0.Затем они объединяются, используя +, чтобы создать список из 25 элементов.

Затем перетасуйте этот список:

random.shuffle(l)

и, наконец, скопируйте значения в матрицу 5x5:

matrix = [l[i:i+5] for i in range(0, 25, 5)]

range(0, 25, 5) выполняет итерацию от 0 до 25 на 5, то есть 0, 5, 10 и т. Д. Затем l[i:i+5] принимает фрагмент из 5 элементов, начинаяна каждом из этих индексов.Понимание списка объединяет все это в двухмерный список.

0 голосов
/ 03 декабря 2018

random.choices в сочетании с пониманием списка - быстрый способ сделать это.Чаще всего у вас будет 10, но вы можете зацикливаться, пока не будете уверены:

from random import choices
total = 0
while total < 10:
    matrix = [choices((0, 1), k=5) for i in range(5)]
    total = sum(map(sum, matrix))

print(matrix)

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

0 голосов
/ 03 декабря 2018

На самом деле, мой дорогой друг, есть простой подход к этой проблеме, и вы должны поставить весь свой код после "if name ==" main":".

import random


def log_matrix(matrix):
    for r in range(len(matrix)):
        print(" ".join([str(i) for i in matrix[r]]))


def sum_matrix(matrix):
    return sum(map(sum, matrix))


def gen_matrix(row, col, minimum):
    random_matrix = [[random.choice([0, 1]) for _ in range(row)]
                     for _ in range(col)]
    while sum_matrix(random_matrix) < minimum:
        random_matrix[random.choice([0, row - 1])][random.choice(
            [0, col - 1])] = 1
    return random_matrix


if __name__ == "__main__":
    random_matrix = gen_matrix(5, 5, 10)
    log_matrix(random_matrix)
0 голосов
/ 03 декабря 2018

Вы можете использовать numpy.random.randint

>>> import numpy as np
>>> np.random.randint(0, 2, (5, 5))
array([[1, 1, 1, 0, 0],
       [1, 0, 1, 1, 1],
       [0, 1, 1, 0, 0],
       [1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0]])

, а затем отменить решения с менее чем 10

Для подсчета количества единиц (поскольку у вас есть только 0 и 1)

>>> data = np.random.randint(0, 2, (5, 5))
>>> data.sum()
13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...