从大小 (1000,9) 和 (1000,10) 矩阵到大小矩阵 (1000,90)
From size (1000,9) and (1000,10) matrix to matrix of size (1000,90)
我有两个矩阵:
- 一个(1000,9)
- B (1000,10)
现在 A[0,0] 应该乘以 B[0,0], B[0,1], ... B[0,9]
A[0,1] 应该乘以 B[0,0], B[0,1], ... B[0,9]
A[1,0] 应该乘以 B[1,0], B[1,1], ... B[1,9]
等等
使得结果矩阵的大小为 (1000,90)
这在 Tensorflow 中是否可以仅通过矩阵运算而无需循环?
按照一些广播规则我觉得应该可以,但是我还没有答案。
tf.tile 可能是将两个张量平铺到 (1000,90) 形状然后进行逐元素乘法的解决方案。但也许有更好的解决方案
C = A[:, tf.newaxis, :] * B[:, :, tf.newaxis]
这给了我们一个 [1000, 10, 9] 张量,其中元素 [i, j, k] 是 A[i, k] * B[i, j]。然后我们重塑
C = tf.reshape(C, [tf.shape(A)[0], -1])
到 [1000, 90]。如果我没记错的话,C 的每一行 i 将首先用 B[i, 0] 乘以 A[i] 中的所有元素,然后 B[i, 1] 乘以 A[i] 中的所有元素等(你可能需要仔细检查)。如果你想要反过来,你可以在第一部分交换 tf.newaxis
。
我有两个矩阵: - 一个(1000,9) - B (1000,10)
现在 A[0,0] 应该乘以 B[0,0], B[0,1], ... B[0,9]
A[0,1] 应该乘以 B[0,0], B[0,1], ... B[0,9]
A[1,0] 应该乘以 B[1,0], B[1,1], ... B[1,9]
等等
使得结果矩阵的大小为 (1000,90)
这在 Tensorflow 中是否可以仅通过矩阵运算而无需循环? 按照一些广播规则我觉得应该可以,但是我还没有答案。
tf.tile 可能是将两个张量平铺到 (1000,90) 形状然后进行逐元素乘法的解决方案。但也许有更好的解决方案
C = A[:, tf.newaxis, :] * B[:, :, tf.newaxis]
这给了我们一个 [1000, 10, 9] 张量,其中元素 [i, j, k] 是 A[i, k] * B[i, j]。然后我们重塑
C = tf.reshape(C, [tf.shape(A)[0], -1])
到 [1000, 90]。如果我没记错的话,C 的每一行 i 将首先用 B[i, 0] 乘以 A[i] 中的所有元素,然后 B[i, 1] 乘以 A[i] 中的所有元素等(你可能需要仔细检查)。如果你想要反过来,你可以在第一部分交换 tf.newaxis
。