>>> a = np.array([[1,2,3],
[2,2,2],
[1,5,3],
[3,3,1]])
>>> x = [2,2,2]
>>> y = [3,3,1]
Создайте логический массив интересующих вас строк
>>> xmask = np.all(a==x,axis=1)
>>> ymask = np.all(a==y,axis=1)
>>> xmask
array([False, True, False, False])
>>> ymask
array([False, False, False, True])
Затем используйте их для изменения значений
>>> a[xmask] = y
>>> a[ymask] = x
>>> a
array([[1, 2, 3],
[3, 3, 1],
[1, 5, 3],
[2, 2, 2]])
>>>
Если массив равен квадрат
>>> a = np.array([[1,2,3,4],
[2,2,2,9],
[1,5,3,1],
[3,3,1,8]])
>>> y = [3,3,1,8]
>>> x = [2,2,2,9]
>>> xmask = np.all(a==x,axis=1)
>>> ymask = np.all(a==y,axis=1)
>>> a[xmask,:] = y
>>> a[ymask,:] = x
логическое индексирование