将具有相同值的两个张量相互转换

时间:2018-06-27 01:38:55

标签: python tensorflow keras

我在值上有两个相同的张量,但在形状上却不同,如下所示:

output_image1 = 
[[[[3. 1.]
   [2. 7.]]

  [[5. 4.]
   [9. 8.]]]


 [[[3. 3.]
   [1. 4.]]

  [[6. 5.]
   [7. 2.]]]]
output_image2 =
[[[[3]
   [1]
   [5]
   [4]]

  [[2]
   [7]
   [9]
   [8]]

  [[3]
   [3]
   [6]
   [5]]

  [[1]
   [4]
   [7]
   [2]]]]

output_image1.shape =  (2, 2, 2, 2)
output_image2.shape =  (1, 4, 4, 1)

如何使用相同的值将image1的形状更改为image2。我的意思是从(2,2,2,2)->(1,4,4,1)并具有与image2相同的值。

2 个答案:

答案 0 :(得分:0)

这需要移调和重塑

生成此图像比生成图像更容易,但是我认为映射正确:

In [154]: arr = np.arange(16).reshape(2,2,2,2)
In [155]: arr
Out[155]: 
array([[[[ 0,  1],
         [ 2,  3]],

        [[ 4,  5],
         [ 6,  7]]],


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]]])

一个reshape(4,4)将创建[0,1,2,3],依此类推,但是您想要[0,1,4,5],因此我们需要交换中间轴。第一个和最后一个轴的顺序不变。

In [156]: arr.transpose(0,2,1,3)
Out[156]: 
array([[[[ 0,  1],
         [ 4,  5]],

        [[ 2,  3],
         [ 6,  7]]],


       [[[ 8,  9],
         [12, 13]],

        [[10, 11],
         [14, 15]]]])

现在只需重塑:

In [157]: arr.transpose(0,2,1,3).reshape(4,4)
Out[157]: 
array([[ 0,  1,  4,  5],
       [ 2,  3,  6,  7],
       [ 8,  9, 12, 13],
       [10, 11, 14, 15]])

或具有增加的单例尺寸:

In [158]: arr.transpose(0,2,1,3).reshape(1,4,4,1)
Out[158]: 
array([[[[ 0],
         [ 1],
         [ 4],
         [ 5]],

        [[ 2],
         [ 3],
         [ 6],
         [ 7]],

        [[ 8],
         [ 9],
         [12],
         [13]],

        [[10],
         [11],
         [14],
         [15]]]])

答案 1 :(得分:0)

我找到了答案,也许对其他人有帮助。我们应该使用此功能:

s = s.replaceAll("(?<=^|;)null(?=$|;)", "");