このようなことをしたいです。
テンソル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で実行するにはどうすればよいですか?
(マトリックスがフラット化されているかどうかは、実際には問題ではありません。)
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
methodを使用できます。
indices = tf.where(where)
where
テンソルには2つのTrue
値があるため、indices
テンソルには2つのエントリがあります。 where
テンソルのランクは2であるため、エントリには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)