If you only care about unique combinations (and there are only 256 of them), you can use itertools.product:
version_1 = np.vstack(list(sorted({tuple(row) for row in list(itertools.combinations(a, 4))}))) # unique combinations, your way
version_2 = np.array(list(itertools.product((1, 11, 12, 13), repeat=4))) # same result, but faster
assert (version_1 == version_2).all()
I'm using this answer to get the unique elements of a Numpy array.
So the final answer would be:
import itertools, numpy as np
a = np.array(list(itertools.product((1, 11, 12, 13), repeat=4)))
for arr in a[a.sum(axis=1) == 21]:
print(arr)