擅长:python、mysql、java
<p><a href="https://www.tensorflow.org/api_docs/python/tf/boolean_mask" rel="nofollow noreferrer">^{<cd1>}</a>确实返回一个一维张量,否则保留维数的结果张量将是稀疏的(c.f.列具有不同数量的正元素)。你知道吗</p>
<p>因为我不知道稀疏矩阵的任何中值函数,所以我想到的唯一替代方法是在列上循环,例如使用<a href="https://www.tensorflow.org/api_docs/python/tf/map_fn" rel="nofollow noreferrer">^{<cd2>}</a>:</p>
<pre class="lang-python prettyprint-override"><code>import tensorflow as tf
A = tf.convert_to_tensor([[ 1, 0, 20, 5],
[-1, 1, 10, 0],
[-2, 1, -10, 2],
[ 0, 2, 20, 1]])
positive_median_fn = lambda x: tf.contrib.distributions.percentile(tf.boolean_mask(x, tf.greater(x, 0)), q=50)
A_t = tf.matrix_transpose(A) # tf.map_fn is applied along 1st dim, so we need to transpose A
res = tf.map_fn(fn=positive_median_fn, elems=A_t)
with tf.Session() as sess:
print(sess.run(res))
# [ 1 1 20 2]
</code></pre>
<hr/>
<p><em>注意:</em>此代码段不包括列不包含正元素的情况。<code>tf.contrib.distributions.percentile()</code>如果其输入张量为空,则返回一个错误。例如,可以使用<code>tf.boolean_mask(x, tf.greater(x, 0))</code>形状的条件(例如与<code>tf.where()</code>)</p>