2015-08-20 115 views
1

我有一个简单的2D numpy的阵列这样比较2D numpy的阵列到自身形成三维阵列

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

我试图做的是通过自身乘以阵列的每行形成三维阵列,(使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]], 
     ..., 
     ..., 
     ...]) 

回答

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)