将2d numpy数组与自身进行比较以形成3d数组

时间:2015-08-20 00:44:25

标签: python numpy

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

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

我要做的是将数组的每一行自身相乘以形成一个3d数组,(以便1*1 = 1和其他任何内容都是0,特别是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]],
       ...,
       ...,
       ...])

1 个答案:

答案 0 :(得分:1)

事实证明答案很简单。如果数组是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)