from itertools import combinations, chain
arr = np.fromiter(chain.from_iterable(combinations(x, 2)), dtype=x.dtype)
arr.reshape(arr.size / 2, 2)
эффективно вычислять перестановки порядка в массиве numpy