web-dev-qa-db-ja.com

TensorFlowでは、Pythonでテンソルからゼロ以外の値とそのインデックスを取得するにはどうすればよいですか?

このようなことをしたいです。
テンソル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)]は、ゼロ以外のインデックスに従って要素を抽出します。
これらの操作の リンク は次のとおりです。

上記のようなTensorflowのNumpy操作をPythonで実行するにはどうすればよいですか?
(マトリックスがフラット化されているかどうかは、実際には問題ではありません。)

21
ByungSoo Ko

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からゼロまたは非ゼロの要素を選択するのに十分です。インデックスを取得する場合は、次のようにwheremethodを使用できます。

indices = tf.where(where)

whereテンソルには2つのTrue値があるため、indicesテンソルには2つのエントリがあります。 whereテンソルのランクは2であるため、エントリには2つのインデックスがあります。

[[0, 0],
 [1, 1]]
34
#assume that an array has 0, 3.069711,  3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)
3
user1098761