Я думаю, что ваш самый быстрый способ сделать это - выполнить операцию на всех парах, а затем распечатать только те результаты, которые вас интересуют. Я предполагаю, что операция так же проста, как и приведенный вами пример умножения.
Я приведу пример использования meshgrid для 1d массива и предоставлю вам возможность расширить до 2d.
a = np.array([1, 2, 3, 4]
print(a)
>>> array([1, 2, 3, 4])
x, y = np.meshgrid(a, a)
print(x)
>>> array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
print(y)
>>> array([[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4]])
z = x*y
print(z)
>>> array([[ 1, 2, 3, 4],
[ 2, 4, 6, 8],
[ 3, 6, 9, 12],
[ 4, 8, 12, 16]])
Теперь результаты, которые вы хотели игнорировать, расположены по диагонали, и вы можете печатать каждый элемент, опуская их следующим образом.
height, width = z.shape
for h in range(height):
for w in range(width):
if h == w:
continue # Skips this one.
print(z[h][z])
Я не уверен, почему вы хотите сделать это дважды, так что, возможно, вам просто нужны два оператора печати или более сложный. Если вы можете прокомментировать это, я могу что-то предложить.
РЕДАКТИРОВАТЬ: я вижу, что вы добавили комментарий, который вам вообще не нужен для циклов. Вы можете просто напечатать все это с помощью print(z)
и игнорировать значения, которые вам не интересны, или, если вы передаете значения чему-то другому, вы можете игнорировать их на этом этапе.