Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:基于另一个数组的重复元素屏蔽数组_Python_Tensorflow_Unique_Mask - Fatal编程技术网

Python Tensorflow:基于另一个数组的重复元素屏蔽数组

Python Tensorflow:基于另一个数组的重复元素屏蔽数组,python,tensorflow,unique,mask,Python,Tensorflow,Unique,Mask,我有一个数组,x=[2,3,4,3,2]包含模型的状态,还有一个数组给出这些状态的相应概率,prob=[.2,1,4,1,2]。但是有些状态是重复的,我需要求它们相应概率的和。所以我想要的输出是:unique\u elems=[2,3,4]和reduced\u prob=[.2+.2,1+.1,4]。我的做法如下: x=tf.常数([2,3,4,3,2]) prob=tf.常数([.2、.1、.4、.1、.2]) 唯一元素,u=tf.unique(x)#[2,3,4] 唯一元素=tf.展开(唯一

我有一个数组,
x=[2,3,4,3,2]
包含模型的状态,还有一个数组给出这些状态的相应概率,
prob=[.2,1,4,1,2]
。但是有些状态是重复的,我需要求它们相应概率的和。所以我想要的输出是:
unique\u elems=[2,3,4]
reduced\u prob=[.2+.2,1+.1,4]
。我的做法如下:

x=tf.常数([2,3,4,3,2])
prob=tf.常数([.2、.1、.4、.1、.2])
唯一元素,u=tf.unique(x)#[2,3,4]
唯一元素=tf.展开(唯一元素,轴=1)#[2]、[3]、[4]]
平铺对象=tf.tile(tf.expand对象,轴=0),[3,1])
# [[0.2, 0.1, 0.4, 0.1, 0.2],
#  [0.2, 0.1, 0.4, 0.1, 0.2],
#  [0.2, 0.1, 0.4, 0.1, 0.2]]
equal=tf.equal(x,唯一元素)
#[True,False,False,False,True],
#[假,真,假,真,假],
#[假,假,真,假,假]]
减少的概率=tf.multiply(平铺概率,tf.cast(相等,tf.float32))
# [[0.2, 0. , 0. , 0. , 0.2],
#  [0. , 0.1, 0. , 0.1, 0. ],
#  [0. , 0. , 0.4, 0. , 0. ]]
减少的概率=tf。减少的概率和(减少的概率,轴=1)
# [0.4, 0.2, 0.4]

但我想知道是否有更有效的方法来做到这一点。特别是,我使用的是tile操作,我认为这对于大型阵列不是很有效

可以通过以下两行操作完成:

unique_elems, idx = tf.unique(x)  # [2, 3, 4]
reduced_prob = tf.unsorted_segment_sum(prob, idx, tf.size(unique_elems))