I spezifische Vektoren in einem 3D-Tensor ändern möchte bestimmte Scheiben maskieren, nach einer Liste von Positionen (Indizes):Wie für jede Zeile in einem Tensor
#indices: 1D vector of positions, indices.shape: (k)
mask = np.zeros(k, n, m)
for i in range(k):
mask[i][indices[i]] = 1
Diese Maske angewandt werden soll ein weiterer 3D-Tensor (gleiche Form), in dem ich bestimmte Vektoren erhalten und den Rest null machen möchte.
Was ist der beste Weg, um eine solche Maske in TensorFlow zu konstruieren? Ich kann es mit einer Schleife machen, indem ich eine Zuweisungsoperation verwende, aber ich würde gerne eine elegantere Lösung finden. Vielleicht mit tf.scatter_nd
?
EDIT: Beispiel: -
np.tile((indices[:,None,None] == np.arange(n)[:,None]), m)
Probelauf -
>>> mask_before
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
>>> indices
array([2, 1, 4])
>>> mask_after
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.]]])
bitte – MaxU
@MaxU gesetzt Beispieldatensätze und Ihre gewünschten Daten zur Verfügung stellen, nehmen Sie bitte einen Blick – MichaelSB