Я думаю, что вы пытаетесь сделать следующее:
>>> import numpy as np
>>> import tensorflow as tf
>>> a = tf.convert_to_tensor(np.random.choice(10, size = 12).reshape(3,4))
>>> a
<tf.Tensor: shape=(3, 4), dtype=int64, numpy=
array([[1, 1, 4, 2],
[9, 3, 9, 1],
[0, 9, 1, 4]])>
>>> mask = tf.convert_to_tensor(np.ones([3,4]).astype(int)*[1, 1, 0, 0])
<tf.Tensor: shape=(3, 4), dtype=int64, numpy=
array([[1, 1, 0, 0],
[1, 1, 0, 0],
[1, 1, 0, 0]])>
>>> a = a * mask - a * (1-mask)
>>> a
<tf.Tensor: shape=(3, 4), dtype=int64, numpy=
array([[ 1, 1, -4, -2],
[ 9, 3, -9, -1],
[ 0, 9, -1, -4]])>
Обратите внимание, что вы должны работать с тем же типом, поэтому маска также должна быть int64
.
В случае, если вы хотите сделать его обобщенным c и изменить количество столбцов, которые хотите маскировать:
n=3
a = tf.convert_to_tensor(np.random.choice(10, size = 12).reshape(3,4))
mask = tf.convert_to_tensor(np.ones([3,4]).astype(int)*([1]*(4-n)+[0]*n))
a = a * mask - a * (1-mask)
, и вы получите последние три столбца с перевернутыми знаками:
<tf.Tensor: shape=(3, 4), dtype=int64, numpy=
array([[ 4, -1, -8, -5],
[ 8, -6, -7, -9],
[ 6, -3, -8, -5]])>