在 TensorFlow 中,如何从具有 python 的张量中获取非零值及其索引?
In TensorFlow, how can I get nonzero values and their indices from a tensor with python?
我想做这样的事情。
假设我们有一个张量 A。
A = [[1,0],[0,4]]
我想从中获取非零值及其索引。
Nonzero values: [1,4]
Nonzero indices: [[0,0],[1,1]]
Numpy中也有类似的操作
np.flatnonzero(A)
return 在扁平 A 中非零的索引。
x.ravel()[np.flatnonzero(x)]
根据非零索引提取元素。
这是这些操作的 a link。
如何使用 python 在 Tensorflow 中执行上述 Numpy 操作?
(矩阵是否展平并不重要。)
您可以使用 not_equal and where 方法在 Tensorflow 中获得相同的结果。
zero = tf.constant(0, dtype=tf.float32)
where = tf.not_equal(A, zero)
where
是与 A
具有相同形状的张量,其中包含 True
或 False
,在以下情况下
[[True, False],
[False, True]]
这足以 select 来自 A
的零或非零元素。如果你想获得指数,你可以使用 where
方法如下:
indices = tf.where(where)
where
张量有两个 True
值,因此 indices
张量将有两个条目。 where
张量的秩为 2,因此条目将有两个索引:
[[0, 0],
[1, 1]]
#assume that an array has 0, 3.069711, 3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)
使用稀疏张量怎么样。
>>> A = [[1,0],[0,4]]
>>> sparse = tf.sparse.from_dense(A)
>>> sparse.values.numpy(), sparse.indices.numpy()
(array([1, 4], dtype=int32), array([[0, 0],
[1, 1]]))
我想做这样的事情。
假设我们有一个张量 A。
A = [[1,0],[0,4]]
我想从中获取非零值及其索引。
Nonzero values: [1,4]
Nonzero indices: [[0,0],[1,1]]
Numpy中也有类似的操作
np.flatnonzero(A)
return 在扁平 A 中非零的索引。
x.ravel()[np.flatnonzero(x)]
根据非零索引提取元素。
这是这些操作的 a link。
如何使用 python 在 Tensorflow 中执行上述 Numpy 操作?
(矩阵是否展平并不重要。)
您可以使用 not_equal and where 方法在 Tensorflow 中获得相同的结果。
zero = tf.constant(0, dtype=tf.float32)
where = tf.not_equal(A, zero)
where
是与 A
具有相同形状的张量,其中包含 True
或 False
,在以下情况下
[[True, False],
[False, True]]
这足以 select 来自 A
的零或非零元素。如果你想获得指数,你可以使用 where
方法如下:
indices = tf.where(where)
where
张量有两个 True
值,因此 indices
张量将有两个条目。 where
张量的秩为 2,因此条目将有两个索引:
[[0, 0],
[1, 1]]
#assume that an array has 0, 3.069711, 3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)
使用稀疏张量怎么样。
>>> A = [[1,0],[0,4]]
>>> sparse = tf.sparse.from_dense(A)
>>> sparse.values.numpy(), sparse.indices.numpy()
(array([1, 4], dtype=int32), array([[0, 0],
[1, 1]]))