Создать отдельные массивы из массива np.zeros, используя их для каждой отдельной строки и столбца исходной матрицы

У меня есть экран, состоящий из 6 строк x 6 столбцов буквенно-цифровых символов (например, p300). Я хотел бы создать массив для каждой из возможных строк и столбцов при их освещении (всего 12). когда конкретный столбец / строка подсвечивается, заполните его единицами, а остальная часть матрицы заполняется нулями. В конце концов, я хотел бы связать конкретную матрицу с событием времени, когда это произошло на экране.

Разбивая строки / столбцы по отдельности, генерируйте переменные для каждого из 12 необходимых выходов.

event_mtx = np.zeros((6,6), dtype=np.int)
_event_mtx = np.zeros((6,6), dtype=np.int)
#replace first row with ones
event_mtx[0]=1
# or replace last column with ones
_event_mtx[:,5]=1

новичок в Python и кодировании, цикл должен помочь сделать это проще. Ниже то, что я попытался только для строк. Создает единицы для каждой строки, однако оставляет предыдущую строку все еще заполненной единицами и продолжает строить с каждой итерацией, заполняя массив 6x6 единицами. Создание массива "new_event" для прохождения текущей итерации, похоже, тоже не помогает. Как я могу создать отдельный массив в цикле, не опираясь на предыдущий? Мысли / комментарии приветствуются

event_mtx = np.zeros((6,6), dtype=np.int)
#new_event =np.zeros((6,6), dtype=np.int)

for i in range(len(event_mtx)):
    for j in range(len(event_mtx[j])):
        event_mtx[0+i] = 1
        #np.new_event = event_mtx

    print(event_mtx)
    #print(new_event)

1 ответ

Вот несколько возможностей:

>>> import numpy as np
>>> 
>>> rows = np.zeros((6, 6, 6), dtype=int)
>>> np.einsum('iij->ij', rows)[...] = 1
>>> cols = np.zeros((6, 6, 6), dtype=int)
>>> np.einsum('iji->ij', cols)[...] = 1
>>> 
>>> for block in (rows, cols):
...     for m in zip(*block):
...         print(list(map(''.join, map(map, 6*(str,), m))))
...     print()
... 
['111111', '000000', '000000', '000000', '000000', '000000']
['000000', '111111', '000000', '000000', '000000', '000000']
['000000', '000000', '111111', '000000', '000000', '000000']
['000000', '000000', '000000', '111111', '000000', '000000']
['000000', '000000', '000000', '000000', '111111', '000000']
['000000', '000000', '000000', '000000', '000000', '111111']

['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
>>> 
>>> row0 = np.outer(0==np.arange(6), np.ones(6, dtype=int))
>>> rows =[np.roll(row0, i, axis=0) for i in range(6)]
>>> col0 = np.outer(np.ones(6, dtype=int), 0==np.arange(6))
>>> cols =[np.roll(col0, i, axis=1) for i in range(6)]
>>> 
>>> for block in (rows, cols):
...     for m in zip(*block):
...         print(list(map(''.join, map(map, 6*(str,), m))))
...     print()
... 
['111111', '000000', '000000', '000000', '000000', '000000']
['000000', '111111', '000000', '000000', '000000', '000000']
['000000', '000000', '111111', '000000', '000000', '000000']
['000000', '000000', '000000', '111111', '000000', '000000']
['000000', '000000', '000000', '000000', '111111', '000000']
['000000', '000000', '000000', '000000', '000000', '111111']

['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
>>>
>>> rows =[np.add.outer(i==np.arange(6), np.zeros(6, dtype=int)) for i in range(6)]
>>> cols =[np.add.outer(np.zeros(6, dtype=int), i==np.arange(6)) for i in range(6)]
>>> 
>>> for block in (rows, cols):
...     for m in zip(*block):
...         print(list(map(''.join, map(map, 6*(str,), m))))
...     print()
... 
['111111', '000000', '000000', '000000', '000000', '000000']
['000000', '111111', '000000', '000000', '000000', '000000']
['000000', '000000', '111111', '000000', '000000', '000000']
['000000', '000000', '000000', '111111', '000000', '000000']
['000000', '000000', '000000', '000000', '111111', '000000']
['000000', '000000', '000000', '000000', '000000', '111111']

['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']

>>> rows = np.empty((6, 6, 6), dtype=int)
>>> rows[...] = np.identity(6)[..., None]
>>> cols = np.empty((6, 6, 6), dtype=int)
>>> cols[...] = np.identity(6)[:, None]
>>> 
>>> for block in (rows, cols):
...     for m in zip(*block):
...         print(list(map(''.join, map(map, 6*(str,), m))))
...     print()
... 
['111111', '000000', '000000', '000000', '000000', '000000']
['000000', '111111', '000000', '000000', '000000', '000000']
['000000', '000000', '111111', '000000', '000000', '000000']
['000000', '000000', '000000', '111111', '000000', '000000']
['000000', '000000', '000000', '000000', '111111', '000000']
['000000', '000000', '000000', '000000', '000000', '111111']

['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
['100000', '010000', '001000', '000100', '000010', '000001']
Другие вопросы по тегам