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网站上找不到它。好的,那么我认为重塑是一种方式。感谢您使用新的解决方案更新这里。实际上,我每列都有唯一的数字,这样解决方案就可以工作了。我相信你的方法更一般。谢谢。感谢您在此更新新的解决方案。实际上,我每列都有唯一的数字,这样解决方案就可以工作了。我相信你的方法更一般。谢谢