gpt4 book ai didi

python - Tensorflow - 使用自定义比较器对张量进行排序

转载 作者:行者123 更新时间:2023-12-01 01:56:15 25 4
gpt4 key购买 nike

如何根据仅使用 Tensorflow 操作的自定义比较函数对形状为 [n,2] 的整数 Tensorflow 张量进行排序?

假设我的张量中的两个条目是 [x1, y1] 和 [x2, y2]。我想对张量进行排序,以便根据条件 x1 * y2 > x2 * y1 对条目重新排序。

最佳答案

假设您可以为您的元素创建一个指标(如果没有,请参阅下面的一般情况)(此处,将不等式重新排列为x1/y1 > x2/y2 ,因此度量将是 x/y 并依靠 TensorFlow 生成 inf (如无穷大)除以零),使用 tf.nn.top_k()就像这段代码(经过测试):

import tensorflow as tf

x = tf.constant( [ [1,2], [3,4], [1,3], [2,5] ] ) # some example numbers

s = tf.truediv( x[ ..., 0 ], x[ ..., 1 ] ) # your sort condition
val, idx = tf.nn.top_k( s, x.get_shape()[ 0 ].value )
x_sorted = tf.gather( x, idx )

with tf.Session() as sess:
print( sess.run( x_sorted ) )

输出:

[[3 4]
[1 2]
[2 5]
[1 3]]

<小时/>

如果您不能或不容易创建一个指标,那么仍然假设该关系为您提供 well-ordering 。 (否则结果未定义。)在这种情况下,您可以为整个集合构建比较矩阵,并按行总和(即有多少个其他元素更大)对元素进行排序;这当然是要排序的元素数量的二次方。此代码(已测试):

import tensorflow as tf

x = tf.constant( [ [1,2], [3,4], [1,3], [2,5] ] ) # some example numbers

x1, y1 = x[ ..., 0 ][ None, ... ], x[ ..., 1 ][ None, ... ] # expanding dims into cols
x2, y2 = x[ ..., 0, None ], x[ ..., 1, None ] # expanding into rows
r = tf.cast( tf.less( x1 * y2, x2 * y1 ), tf.int32 ) # your sort condition, with implicit broadcasting
s = tf.reduce_sum( r, axis = 1 ) # how many other elements are greater

val, idx = tf.nn.top_k( s, s.get_shape()[ 0 ].value )
x_sorted = tf.gather( x, idx )

with tf.Session() as sess:
print( sess.run( x_sorted ) )

输出:

[[3 4]
[1 2]
[2 5]
[1 3]]

关于python - Tensorflow - 使用自定义比较器对张量进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50154312/

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