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

90
11

У меня есть экран, состоящий из 6 строк x 6 столбцов буквенно-цифровых символов (например, p300 speller). Я хотел бы создать массив для каждой из возможных строк и столбцов при их освещении (всего 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

новый для питона и кодирования, цикл должен помочь сделать это проще. Ниже я попытался выполнить только строки. Создает их для каждой строки, однако оставляет предыдущую строку по-прежнему заполненной и продолжает строить с каждой итерацией, заполняя массив 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)

спросил(а) 2021-01-19T15:36:27+03:00 6 месяцев назад
1
Решение
100

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

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

ответил(а) 2021-01-19T15:36:27+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема