我有一个像这样的简单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)