如何根据张量流中的列条件获取张量值的索引
how to get indices of a tensor values based on a column condition in tensorflow
我有一个像这样的张量:
sim_topics = [[0.65 0. 0. 0. 0.42 0. 0. 0.51 0. 0.34 0.]
[0. 0.51 0. 0. 0.52 0. 0. 0. 0.53 0.42 0.]
[0. 0.32 0. 0.50 0.34 0. 0. 0.39 0.32 0.52 0.]
[0. 0.23 0.37 0. 0. 0.37 0.37 0. 0.47 0.39 0.3 ]]
我想根据张量条件获取此张量中的索引:
masked_t = [True False True False True True False True False True False]
所以输出应该是这样的:
[[0.65 0. 0. 0. 0.42 0. 0. 0.51 0. 0.34 0.]
[0. 0. 0. 0. 0.52 0. 0. 0. 0. 0.42 0.]
[0. 0. 0. 0. 0.34 0. 0. 0.39 0. 0.52 0.]
[0. 0. 0.37 0. 0. 0.37 0. 0. 0. 0.39 0.]]
所以条件是作用于初始张量的列。实际上我需要在 maske_t
.
中为 True 的元素的索引
所以索引应该是:
[[0, 0],
[1,0],
[2, 0],
[3,0],
[0,2],
[1,2],
[2,2],
[3,2],
....]]
实际上,当我按行进行时,这种方法有效,但在这里我想 select 基于条件的特定列,因此它会引发不兼容错误:
out = tf.cast(tf.zeros(shape=tf.shape(sim_topics), dtype=tf.float64), tf.float64)
indices = tf.where(tf.where(masked_t, out, sim_topics))
您可以像这样直接获取您需要的张量:
result = tf.multiply(sim_topics, tf.cast(masked_t, dtype=tf.float64))
让广播完成 masked_t 与 sim_topics
大小相同的工作
我有一个像这样的张量:
sim_topics = [[0.65 0. 0. 0. 0.42 0. 0. 0.51 0. 0.34 0.]
[0. 0.51 0. 0. 0.52 0. 0. 0. 0.53 0.42 0.]
[0. 0.32 0. 0.50 0.34 0. 0. 0.39 0.32 0.52 0.]
[0. 0.23 0.37 0. 0. 0.37 0.37 0. 0.47 0.39 0.3 ]]
我想根据张量条件获取此张量中的索引:
masked_t = [True False True False True True False True False True False]
所以输出应该是这样的:
[[0.65 0. 0. 0. 0.42 0. 0. 0.51 0. 0.34 0.]
[0. 0. 0. 0. 0.52 0. 0. 0. 0. 0.42 0.]
[0. 0. 0. 0. 0.34 0. 0. 0.39 0. 0.52 0.]
[0. 0. 0.37 0. 0. 0.37 0. 0. 0. 0.39 0.]]
所以条件是作用于初始张量的列。实际上我需要在 maske_t
.
所以索引应该是:
[[0, 0],
[1,0],
[2, 0],
[3,0],
[0,2],
[1,2],
[2,2],
[3,2],
....]]
实际上,当我按行进行时,这种方法有效,但在这里我想 select 基于条件的特定列,因此它会引发不兼容错误:
out = tf.cast(tf.zeros(shape=tf.shape(sim_topics), dtype=tf.float64), tf.float64)
indices = tf.where(tf.where(masked_t, out, sim_topics))
您可以像这样直接获取您需要的张量:
result = tf.multiply(sim_topics, tf.cast(masked_t, dtype=tf.float64))
让广播完成 masked_t 与 sim_topics
大小相同的工作