在 TensorFlow 中,如何使用 python 从张量中获取非零值及其索引?

Posted

技术标签:

【中文标题】在 TensorFlow 中,如何使用 python 从张量中获取非零值及其索引?【英文标题】:In TensorFlow, how can I get nonzero values and their indices from a tensor with 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 操作? (矩阵是否展平并不重要。)

【问题讨论】:

【参考方案1】:

您可以使用not_equal 和where 方法在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)

【讨论】:

负值也可以是非零。这不是返回索引。

以上是关于在 TensorFlow 中,如何使用 python 从张量中获取非零值及其索引?的主要内容,如果未能解决你的问题,请参考以下文章

Focal Loss 安装与使用 TensorFlow2.x版本

Focal Loss 安装与使用 TensorFlow2.x版本

Focal Loss 安装与使用 TensorFlow2.x版本

TensorFlow的环境配置与安装以及在Pycharm的使用

使用Anaconda设置TensorFlow开发环境(windows)

TensorFlow 图像识别教程貌似过时了?