如何连续每行的最大值除以张量流中的两个部分?

时间:2017-01-09 20:29:03

标签: python numpy tensorflow

我是张力流的新手。

实际上,我的问题是如何将每一行的最大值除以张量流中的两部分?

这是我想在numpy代码中做的事情的一个例子。

def concat_rows(matrix,separete_ids):
    rows = []
    for (each_row,sep_id) in zip(matrix,separete_ids):
        s1 = np.max(each_row[:sep_id+1])
        s2 = np.max(each_row[sep_id:])
        rows.append([s1,s2])
    return np.array(rows)

np_x = np.arange(20).reshape(4,5)
print np_x
np_s = np.array([2,1,0,3])
print np_s
print concat_rows(np_x,np_s)

我想使用tf.py_func,但我不知道渐变实现的想法。

1 个答案:

答案 0 :(得分:0)

您可以使用map_fn将最大/最小功能应用于每一行

def process_row(args):
    """Returns max value before sep_id and max value after sep_id in row"""
    row = args[0]
    sep_id = args[1]
    return tf.stack([tf.reduce_max(row[:sep_id+1]), tf.reduce_max(row[sep_id:])])

array = tf.reshape(tf.range(20), (4, 5))
sepids = tf.constant([2,1,0,3], dtype=tf.int32)
sess = tf.InteractiveSession()
sess.run(tf.map_fn(process_row, (array, sepids), dtype=(tf.int32)))    

这应该打印

array([[ 2,  4],
       [ 6,  9],
       [10, 14],
       [18, 19]], dtype=int32)