我有一个像这样的简单2d numpy数组

array([[1, 0, 1],
       [1, 1, 0],
       [0, 1, 1],
       [0, 0, 0],
       [1, 0, 0]])


我想做的是将数组的每一行自身相乘以形成3d数组,(这样1*1 = 1和其他任何东西都是0,essentailly是and函数):

array([[[1,0,1],[1,0,0],[0,0,1],[0,0,0],[1,0,0]],
       [[1,0,0],[1,1,0],[0,1,0],[0,0,0],[1,0,0]],
       ...,
       ...,
       ...])

最佳答案

原来答案很简单。如果数组是x

x[np.newaxis,:,:]*x[:,np.newaxis,:]


这适用于诸如逻辑表达式之类的事情,如果您只想比较每一行中相同的元素,则可以执行以下操作:

np.logical_not(np.logical_xor(x[np.newaxis,:,:], x[:,np.newaxis,:]))


哪个会返回:

array([[[ True,  True,  True],
        [ True, False, False],
        [False, False,  True],
        [False,  True, False],
        [ True,  True, False]],

       [[ True, False, False],
        [ True,  True,  True],
        [False,  True, False],
        [False, False,  True],
        [ True, False,  True]],

       ...,
       ...,
       ...], dtype=bool)

10-07 19:07
查看更多