我目前拥有允许人们在特定轴上采用组合(笛卡尔)产品的代码。这是numpy,源于之前的问题Efficient axis-wise cartesian product of multiple 2D matrices with Numpy or TensorFlow
A = np.array([[1,2],
[3,4]])
B = np.array([[10,20],
[5,6]])
C = np.array([[50, 0],
[60, 8]])
cartesian_product( [A,B,C], axis=1 )
>> np.array([[ 1*10*50, 1*10*0, 1*20*50, 1*20*0, 2*10*50, 2*10*0, 2*20*50, 2*20*0]
[ 3*5*60, 3*5*8, 3*6*60, 3*6*8, 4*5*60, 4*5*8, 4*6*60, 4*6*8]])
并重申解决方案:
L = [A,B,C] # list of arrays
n = L[0].shape[0]
out = (L[1][:,None]*L[0][:,:,None]).reshape(n,-1)
for i in L[2:]:
out = (i[:,None]*out[:,:,None]).reshape(n,-1)
是否存在使用tensorflow中的广播执行此操作的现有方法 - 没有for循环?
答案 0 :(得分:0)
好的,所以我设法找到了两个数组的纯tf(部分)答案。它目前不像M阵列的numpy解决方案那样具有推广性,但对于另一个问题(可能是tf.while_loop)也是如此。对于那些好奇的人,解决方案适应Evaluate all pair combinations of rows of two tensors in tensorflow
a = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[4, 5, 6, 7]])
b = np.array([[0, 1],
[2, 3],
[2, 3]])
N = a.shape[0]
A = tf.constant(a, dtype=tf.float64)
B = tf.constant(b, dtype=tf.float64)
A_ = tf.expand_dims(A, axis=1)
B_ = tf.expand_dims(B, axis=2)
z = tf.reshape(tf.multiply(A_, B_), [N, -1])
>> tf_result
Out[1]:
array([[ 0., 0., 0., 0., 0., 1., 2., 3.],
[ 8., 10., 12., 14., 12., 15., 18., 21.],
[ 8., 10., 12., 14., 12., 15., 18., 21.]])
欢迎使用多阵列案例的解决方案