gpt4 book ai didi

python - 如何获得张量/矩阵中列正元素的中值?

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:09 25 4
gpt4 key购买 nike

具体给定一个二维矩阵,如何找到每一列正元素的中值?

从数学上讲:返回 B,其中 B[i] = median({A[j, i] | A[j, i] > 0})

我知道中位数可以通过 tf.contrib.distributions.percentile

计算

tf.boolean_mask(A, tf.greater(A, 0)) 输出一维列表而不是矩阵。

最佳答案

tf.boolean_mask()确实会返回一维张量,否则保留维度的结果张量将是稀疏的(参见具有不同数量正元素的列)。

因为我不知道稀疏矩阵有任何中值函数,所以想到的唯一选择是遍历列,例如使用 tf.map_fn() :

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]

注意:此代码段不涵盖列不包含正元素的情况。 tf.contrib.distributions.percentile() 如果其输入张量为空,将返回错误。例如,可以使用 tf.boolean_mask(x, tf.greater(x, 0)) 的形状条件(例如 tf.where())

关于python - 如何获得张量/矩阵中列正元素的中值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52474817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com