【问题标题】:Sorting and merging two tensors with tensorflow使用 tensorflow 对两个张量进行排序和合并
【发布时间】:2019-01-30 21:01:35
【问题描述】:

我有两个张量,A 和 B,每个都是 Nx3。我还有一个布尔张量 C = Nx1。我想使用这个布尔值按照 C 的值合并 A 和 B。例如:

A = [[ a1, a2, a3],
     [ a4, a5, a6],
     [ a7, a8, a9]]

B = [[ b1, b2, b3],
     [ b4, b5, b6],
     [ b7, b8, b9]]

C = [True, True, False]

我想要的是得到这样的东西:

D = [[[ a1, a2, a3],
      [ b1, b2, b3]],

     [[ a4, a5, a6],
      [ b4, b5, b6]],

     [[ b7, b8, b9],
      [ a7, a8, a9]]]

如您所见,两个张量都已合并,行先行的顺序由 C 的值决定。

两个Nx3张量A和B通过合并原始张量的行合并成一个D = Nx2x3张量。它们添加到 Nx2x3 张量的顺序取决于布尔张量 C,即

如果 C[i] = True,则 D[i,0,:] = A[i,:] 并且 D[i, 1, :] = B[i, :]。如果 C[i] = False,则 D[i, 0, :] = B[i, :] 和 D[i, 1, :] = A[i, :]

我确信有一个简单的方法可以解决这个问题,但我无法弄清楚。

【问题讨论】:

  • 您能进一步解释一下吗?
  • 我正在通过合并原始张量的行将两个 Nx3 张量 A 和 B 合并为一个 D = Nx2x3 张量。它们添加到 Nx2x3 张量的顺序取决于布尔张量 C,即如果 C[i] = True、D[i,0,:] = A[i,:] 和 D[i, 1, : ] = B[i, :]。如果 C[i] = False,则 D[i, 0, :] = B[i, :] 和 D[i, 1, :] = A[i, :]
  • 添加您的详细信息以更清楚。

标签: python-3.x sorting tensorflow merge


【解决方案1】:

如果ABC是Numpy的数组,可以通过这种方式使用Numpy的屏蔽索引技术合并它们:

D = np.zeros((N,2,3))
D[C,0,:] = A[C]
D[~C,0,:] = B[~C]
D[~C,1,:] = A[~C]
D[C,1,:] = B[C]   

事实上,C 不一定是 Numpy 的数组。列表可以作为 Python 中数组的索引。

【讨论】:

    【解决方案2】:

    所以我找到了一个解决方案,尽管它可能不是一个有效的解决方案。如果其他人有同样的问题,我的工作方式如下(使用与上面相同的 A、B、C 和 D):

    row_num = tf.cast(tf.reshape(tf.range(A.shape[0]), [-1, 1]), tf.int64)
    AB = tf.concat([tf.expand_dims(A, 1), tf.expand_dims(B, 1)], axis=1)
    filt_top = tf.reshape(tf.cast(C, tf.int64), [-1, 1])
    filt_bottom = tf.reshape(tf.cast(tf.logical_not(C), tf.int64), [-1, 1])
    filt = tf.concat([row_num, filt_top, filt_bottom], axis=1)
    D_top = tf.map_fn(lambda x: AB[x[0], x[1], :], filt, dtype=tf.float32)
    D_bottom = tf.map_fn(lambda x: AB[x[0], x[2], :], filt, dtype=tf.float32)
    D = tf.concat([D_top, D_bottom], axis=1)
    

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2021-04-17
      • 2022-10-04
      相关资源
      最近更新 更多