在 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
保持True
或False
形状相同的张量,在以下情况下
[[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的使用