【问题标题】:In TensorFlow, how can I get nonzero values and their indices from a tensor with python?在 TensorFlow 中,如何使用 python 从张量中获取非零值及其索引?
【发布时间】:2017-01-06 06:16:59
【问题描述】:

我想做这样的事情。
假设我们有一个张量 A。

A = [[1,0],[0,4]]

我想从中获取非零值及其索引。

Nonzero values: [1,4]  
Nonzero indices: [[0,0],[1,1]]

在 Numpy 中也有类似的操作。
np.flatnonzero(A) 在展平的 A 中返回非零索引。
x.ravel()[np.flatnonzero(x)] 根据非零索引提取元素。
以下是这些操作的 a link

如何使用 python 在 Tensorflow 中执行上述 Numpy 操作?
(矩阵是否展平并不重要。)

【问题讨论】:

    标签: python tensorflow indices


    【解决方案1】:

    您可以使用not_equalwhere 方法在Tensorflow 中获得相同的结果。

    zero = tf.constant(0, dtype=tf.float32)
    where = tf.not_equal(A, zero)
    

    where 是与A 保持TrueFalse 形状相同的张量,在以下情况下

    [[True, False],
     [False, True]]
    

    这足以从A 中选择零或非零元素。如果要获取索引,可以使用where方法,如下:

    indices = tf.where(where)
    

    where 张量有两个 True 值,因此 indices 张量将有两个条目。 where 张量的秩为二,因此条目将有两个索引:

    [[0, 0],
     [1, 1]]
    

    【讨论】:

    • 如何从布尔矩阵中得到数组?我认为布尔索引尚未实现
    • @martianwars 查看where 文档的链接。它接受布尔值并产生对应索引的张量。
    • 不,我指的是那些索引处的值。我使用布尔掩码做到了
    • 你怎样才能得到完全为零的行的索引?
    • re "我想获得非零值" 请展示如何获取这些索引处的值。谢谢
    【解决方案2】:
    #assume that an array has 0, 3.069711,  3.167817.
    mask = tf.greater(array, 0)
    non_zero_array = tf.boolean_mask(array, mask)
    

    【讨论】:

    • 负值也可以是非零。这不是返回索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2022-10-19
    • 1970-01-01
    • 2019-12-18
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多