In [822]: r=np.arange(4)
Ваше понимание списка:
In [823]: [i==r for i in r]
Out[823]:
[array([ True, False, False, False]),
array([False, True, False, False]),
array([False, False, True, False]),
array([False, False, False, True])]
Эквивалент транслируемого массива:
In [824]: r[:,None]==r[None,:]
Out[824]:
array([[ True, False, False, False],
[False, True, False, False],
[False, False, True, False],
[False, False, False, True]])
другой подход к массиву:
In [825]: A = np.zeros((4,4),int)
In [826]: A[np.arange(4),np.arange(4)] = 1
In [827]: A
Out[827]:
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
или (по коду np.tri
):
In [831]: np.equal.outer(np.arange(4), np.arange(4))
Out[831]:
array([[ True, False, False, False],
[False, True, False, False],
[False, False, True, False],
[False, False, False, True]])