def cartesian(x,y):
#return np.transpose( [ np.tile(x, len(y)), np.repeat(y, len(x)) ] )
a = np.tile(x, len(y))
b = np.repeat(y, len(x))
m = np.array([a,b])
return m.T
cartesian(np.array([1,2,3]),np.array([4,5]))
array([[1, 4],
[2, 4],
[3, 4],
[1, 5],
[2, 5],
[3, 5]])