【发布时间】:2019-08-14 12:37:23
【问题描述】:
我有一个张量 x,
x={Tensor} Tensor("Cast:0", shape=(?,3), dtype=int32)
现在,我需要遍历这个张量批次的每个三元组(比如一个三元组是 (a,b,c))并获取其中的第一个元素(在本例中为 a)。
然后,我需要获取数据集 Y(如下)中的所有其他三元组,它们的第一个元素也为 'a'。
最终,我希望返回所有以 'a' 作为第一个元素的三元组,不包括有问题的三元组(即在这种情况下,不包括 (a,b,c))。
假设 x 是一个列表,我之前也在使用相同的方法。
因此,就列表操作而言:
t=list({triple for x in x_to_score for triple in self.d[x[0]]} - set(x_to_score.eval()))
其中 d 是一个字典,其中包含按第一个元素分组的所有三元组的列表。例如:
对于
Y=np.array([['a', 'y', 'b'],
['b', 'y', 'a'],
['a', 'y', 'c'],
['c', 'y', 'a'],
['a', 'y', 'd'],
['c', 'y', 'd'],
['b', 'y', 'c'],
['f', 'y', 'e']])
d={'f': [('f', 'y', 'e')],
'c': [('c', 'y', 'a'), ('c', 'y', 'd')],
'a': [('a', 'y', 'b'), ('a', 'y', 'c'), ('a', 'y', 'd')],
'b': [('b', 'y', 'a'), ('b', 'y', 'c')]}
但是,我是 tensorflow 的新手,无法找到将这些操作转换为张量的方法。对于每个评估的三元组,结果也应该是 [?,3] 的顺序。
请注意,必须禁用急切执行。
欢迎任何帮助!
编辑: 如果输入张量 x=(a,y,d)(注意这可以是一个批次,所以 x=[(a,y,d),(b,y,c)] 等),那么预期的输出将是:
[('a', 'y', 'b'), ('a', 'y', 'c')]
【问题讨论】:
-
您能否给出示例中的
X数组所需的输出?我不明白您是否想要X中的“三元组”匹配 first 三元组或 each 三元组的第一个元素,如果是第二种情况,我不确定你是否想要获得几个张量或什么。另外,我不清楚X是否可能包含重复的三元组,在这种情况下,是否需要排除匹配的三元组的副本。 -
@jdehesa 刚刚意识到问题不是很清楚,进行了编辑。数据集 Y 或 x 中不会有重复的三元组。
-
好的,但是你说“注意这可以是一个批处理”,那么在批处理的情况下你会得到什么输出?连接所有子结果?多个张量? 3D 张量(在这种情况下,每个给定输入的匹配数必须相同,否则结果需要不规则或填充)?
-
@jdehesa 基本上是一个 [n,3] 列表,它是所有连接的子结果,但对于每个主题都是可区分的。所以在 [(a,y,d),(b,y,c)] 的示例批次中,结果应该是 [[(a,y,b),(a,y,c)],[(b, y,a)]]
-
好的,一批内匹配的三元组数,是固定的吗?因为如果它是可变的,你将无法做到这一点(如果你想要一个 Python 的张量列表,该列表的大小必须是固定的并且事先知道)。
标签: python numpy tensorflow tensor-indexing