def dummy_product(d1, d2, method='full'):
 if (method == 'full'):
  dd = (d1[:, :, None] * d2[:, None, :]).reshape(d1.shape[0], (-1))
 elif (method == 'drop-last'):
  d12rl = dummy_product(d1[:, :(-1)], d2[:, :(-1)])
  dd = np.column_stack((np.ones(d1.shape[0], int), d1[:, :(-1)], d2[:, :(-1)], d12rl))
 elif (method == 'drop-first'):
  d12r = dummy_product(d1[:, 1:], d2[:, 1:])
  dd = np.column_stack((np.ones(d1.shape[0], int), d1[:, 1:], d2[:, 1:], d12r))
 else:
  raise ValueError('method not recognized')
 return dd

def dummy_product ( d1 , d2 , method = 'full' ) : if ( method == 'full' ) : dd = ( d1 [ : , : , None ] * d2 [ : , None , : ] ) . reshape ( d1 . shape [ 0 ] , ( - 1 ) ) elif ( method == 'drop-last' ) : d12rl = dummy_product ( d1 [ : , : ( - 1 ) ] , d2 [ : , : ( - 1 ) ] ) dd = np . column_stack ( ( np . ones ( d1 . shape [ 0 ] , int ) , d1 [ : , : ( - 1 ) ] , d2 [ : , : ( - 1 ) ] , d12rl ) ) elif ( method == 'drop-first' ) : d12r = dummy_product ( d1 [ : , 1 : ] , d2 [ : , 1 : ] ) dd = np . column_stack ( ( np . ones ( d1 . shape [ 0 ] , int ) , d1 [ : , 1 : ] , d2 [ : , 1 : ] , d12r ) ) else : raise ValueError ( 'method not recognized' ) return dd
dummy variable from product of two dummy variables parameters d1 .