0

我有一个由 6 行 x 6 列的字母数字字符组成的屏幕(例如 p300 拼写器)我想为每个可能的行和列在它们照亮时创建一个数组(总共 12 个)。当特定的列/行被照亮时,用 1 填充它,而矩阵的其余部分用 0 填充。最终,我想将特定矩阵与屏幕上发生的时间事件相关联。

单独切片行/列,为所需的 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)
4

1 回答 1

0

这里有几种可能性:

>>> 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']
于 2018-01-27T17:40:51.247 回答