如何将 SparseTensorValue 转换为 numpy 数组?

Eri*_*lib 2 python numpy tensorflow

我有一个 Tensorflow 网络,可以在调用后获取图形的值Session().run()。但是,我在转换SparseTensorValue为其他类型时遇到了一些麻烦。

例如,以下程序创建一个SparseTensorValue.

>>> import tensorflow as tf
>>> t = tf.Session().run(tf.SparseTensor([[0,1], [0,0], [1,1], [1,0]],[1,2,3,4],[2,2]))
>>> print(t)
SparseTensorValue(indices=array([[0, 1],
       [0, 0],
       [1, 1],
       [1, 0]]), values=array([1, 2, 3, 4], dtype=int32), dense_shape=array([2, 2]))
>>> 
Run Code Online (Sandbox Code Playgroud)

我想要的是某种方式转换t为 anp.arraynp.matrix,例如np.array([[2., 1.], [4., 3.]]).

我目前拥有的是以下内容

>>> import numpy as np
>>> a = np.zeros(t.dense_shape)
>>> for i, v in zip(t.indices, t.values) :
...     a[tuple(i)] = v
... 
>>> print(a)
[[2. 1.]
 [4. 3.]]
>>> 
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来执行转换?特别是,我想消除 for 循环。

Eri*_*lib 6

感谢hpaulj的提示,我从 Tensorflow 的网站上找到了转换的方法。

tf.Session().run(tf.sparse.to_dense(tf.sparse.reorder(t)))
Run Code Online (Sandbox Code Playgroud)

首先将值重新排序为字典顺序,然后使用to_dense使其稠密,最后将张量输入到Session().run()