Python 如何在tensorflow中对2d数组应用唯一的\u和\u计数

Python 如何在tensorflow中对2d数组应用唯一的\u和\u计数,python,tensorflow,matrix,deep-learning,Python,Tensorflow,Matrix,Deep Learning,我有一个张量: tf_a1 = [[0 3 1 22] [3 5 2 2] [2 6 3 13] [1 7 0 3 ] [4 9 11 10]] 我想做的是找到在所有列中重复超过阈值的唯一值 例如,此处,3在4列中重复0在2列中重复2在3列中重复,依此类推 我希望我的输出是这样的(假设阈值是2,那么重复超过2次的索引将被屏蔽) 这就是我所做的: y, idx, count = tf.unique_with_counts(tf_a

我有一个张量:

tf_a1 = [[0 3 1 22]
        [3 5 2  2]
        [2 6 3 13]
        [1 7 0 3 ]
        [4 9 11 10]]
我想做的是找到在所有列中重复超过
阈值的唯一值

例如,此处,
3
4列中重复<代码>0
2列中重复
2
3列中重复,依此类推

我希望我的输出是这样的(假设阈值是
2
,那么重复超过2次的索引将被屏蔽)

这就是我所做的:

y, idx, count = tf.unique_with_counts(tf_a1)   
tf.where(tf.where(count, tf_a1, tf.zeros_like(tf_a1)))
但这也带来了一个错误:

tensorflow.python.framework.errors\u impl.InvalidArgumentError:唯一 需要一维向量。[Op:UniqueWithCounts]


谢谢。

似乎
unique\u with\u count
应该支持多维和axis,但是我在文档中找不到任何内容

我的解决方法是首先将我的张量重塑为1d数组,然后使用_count
应用
unique_,然后将其重塑为原始大小:

感谢@a_嘉宾分享这个想法

token_idx = tf.reshape(tf_a1, [-1])
y, idx, count = tf.unique_with_counts(token_idx)
masked = tf.greater_equal(count, 2)
backed_same_size = tf.gather(masked, idx)
tf.reshape(backed_same_size, shape=tf.shape(tf_a1))

似乎
unique\u with\u count
应该支持多维和axis,但是我在文档中找不到任何东西

我的解决方法是首先将我的张量重塑为1d数组,然后使用_count
应用
unique_,然后将其重塑为原始大小:

感谢@a_嘉宾分享这个想法

token_idx = tf.reshape(tf_a1, [-1])
y, idx, count = tf.unique_with_counts(token_idx)
masked = tf.greater_equal(count, 2)
backed_same_size = tf.gather(masked, idx)
tf.reshape(backed_same_size, shape=tf.shape(tf_a1))

目前,支持axis的带有计数的
unique\u的API尚未公开。如果您想用多维张量
唯一\u和\u计数
,您可以在tf 1.14中这样称呼它:

从tensorflow.python.ops导入gen_数组_ops
#张量“x”是[[1,0,0],
#                [1, 0, 0],
#                [2, 0, 0]]
y、 idx,count=gen_数组_ops.unique_与_counts_v2(x,[0])
y==>[[1,0,0],
[2, 0, 0]]
idx==>[0,0,1]
计数==>[2,1]
因为我无法评论@sariii post。它应该是
tf.更大(计数,2)
。此外,我认为这个解决方案不能满足问题的要求。例如,如果第一列都是2,而其余列没有2。根据您的要求,2应计为1次。但在您的解决方案中,如果您先将形状改为1d,则会丢失此信息。如果我错了,请纠正我


目前,支持axis的
unique\u和_counts
的API尚未公开。如果您想用多维张量
唯一\u和\u计数
,您可以在tf 1.14中这样称呼它:

从tensorflow.python.ops导入gen_数组_ops
#张量“x”是[[1,0,0],
#                [1, 0, 0],
#                [2, 0, 0]]
y、 idx,count=gen_数组_ops.unique_与_counts_v2(x,[0])
y==>[[1,0,0],
[2, 0, 0]]
idx==>[0,0,1]
计数==>[2,1]
因为我无法评论@sariii post。它应该是
tf.更大(计数,2)
。此外,我认为这个解决方案不能满足问题的要求。例如,如果第一列都是2,而其余列没有2。根据您的要求,2应计为1次。但在您的解决方案中,如果您先将形状改为1d,则会丢失此信息。如果我错了,请纠正我


在调用
unique\u和\u counts
之前,如何将形状改为1D?@a\u客人感谢您的回答,听起来确实不错。之后,我可以再次将其重塑为2d阵列。corect?那应该行的,是的。顺便说一句,根据
unique\u和_计数
应支持
参数(尽管未记录在案?)。你能检查一下它是否有效吗?啊,等等,但这对你没有帮助,对吗?实际上,你能在同一列中重复吗?如果是这样的话,这算是“重复”吗?实际上每列我都没有重复。我搜索并发现“unique count应该支持多维数组加axis,但我在tensorflow网站上找不到它。好吧,那么我认为重塑是一种方式。在调用
unique\u with\u counts
”之前,重塑为1D怎么样?@a\u嘉宾谢谢你的回答,听起来确实不错。之后,我可以再次将其重塑为2d阵列。corect?那应该行的,是的。顺便说一句,根据
unique\u和_计数
应支持
参数(尽管未记录在案?)。你能检查一下它是否有效吗?啊,等等,但这对你没有帮助,对吗?实际上,你能在同一列中重复吗?如果是这样的话,这算是“重复”吗?实际上每列我都没有重复。我搜索并发现`唯一计数应支持多维数组加轴,但我在tensorflow网站上找不到它。好的,那么我认为重塑是一种方式。感谢您使用新的解决方案更新这里。实际上,我每列都有唯一的数字,这样解决方案就可以工作了。我相信你的方法更一般。谢谢。感谢您在此更新新的解决方案。实际上,我每列都有唯一的数字,这样解决方案就可以工作了。我相信你的方法更一般。谢谢