【发布时间】:2017-06-22 18:21:12
【问题描述】:
我有两个 rank-2 Tensors,在第二个维度上大小相等,但在第一个维度上不相等。例如,形状为[a, n] 的张量A 和形状为[b, n] 的张量B。它们可以看作是两个包含长度为n的向量的数组。
我有一个函数f,它接受两个输入,每个输入一个形状为[n] 的张量,并返回一个标量。我想将此函数应用于A 和B 中的每对向量,结果是形状为[a, b] 的张量C,这样,对于C 中的每个位置(i, j),C[i, j] = f(A[i], B[j]) .
如果这些只是常规的 Numpy 数组,我可以使用以下代码完成此操作:
# Assume a, b, and n are integers, and A and B are Numpy arrays
C = numpy.zeros((a, b))
for i in range(0, a):
for j in range(0, b):
C[i, j] = f(A[i], B[j])
return C
如果这可以通过f 简单地将A 和B 作为输入并返回C 的方式来完成,那将是首选的解决方案,以便一切都作为适当的张量操作发生,所以这一切都可以通过 Tensorflow 正确并行化。只要最终结果相同。
我找到了一个solution to this problem,专门用于f 计算每对向量之间的欧几里得距离。我想将此扩展到其他函数,例如余弦距离或曼哈顿 (L1) 距离。
【问题讨论】:
-
让
f直接处理维度为[a, n]和[b, n]的张量实际上可能在可扩展性和性能方面更好。 -
我想我应该澄清一下,我不一定需要
f成为一个单独的函数。我只想应用 some 实现指定结果的操作。正如您所说,让它直接对整个张量进行操作将是首选解决方案。我现在会澄清这一点。 -
我发现了这个类似的问题,我现在正在研究它是否可以将它扩展到欧几里得距离以外的函数:stackoverflow.com/questions/37009647/…
标签: python tensorflow linear-algebra