Вы можете сделать это следующим образом, обратите внимание, что результатом является транспонирование вашего результата (также в этом случае результатом является 2d-массив, а в вашем случае это список 1-мерных массивов).
>>> from itertools import combinations
>>> I, J = np.array(list(combinations([0,1,2], 2))).T
>>> result = np.logical_and(np_data[:, I], np_data[:, J])
>>> result
array([[False, False, True],
[False, True, False],
[False, True, False]], dtype=bool)
>>> result.T
array([[False, False, False],
[False, True, True],
[ True, False, False]], dtype=bool)