将张量转换为另一个张量

时间:2019-01-27 17:12:44

标签: python arrays list numpy

我有一个数组列表

T = [np.array([[1, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]), np.array([[0, 0, 1], [0, 0, 1], [1, 0, 0], [0, 1,
 0]]), np.array([[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 1]]), np.array([[1, 0, 0], [1, 0, 0], [0, 0, 1], [0, 1, 0]])]

那么如果有张量

T = np.array(T)

该张量的形状为(5, 4, 3)。我想重塑该张量以获得(4, 5, 3)。换句话说,维度为(5,3)的4个矩阵。第一个矩阵就是

 [[1, 0, 0],
  [1, 0, 0],
  [0, 0, 1],
  [0, 1, 0]
  [1, 0, 0]]

第二个

 [[1, 0, 0],
  [0, 0, 1],
  [0, 0, 1],
  [0, 0, 1]
  [1, 0, 0]]

以此类推

我试图只是转置张量,但这对我没有帮助。

如何重塑T以获得尺寸(4, 5, 3)

2 个答案:

答案 0 :(得分:2)

使用以下内容

np.transpose(T, (1, 0, 2))

第二个参数指的是张量轴的位置。由于T的形状为(5, 4, 3),这意味着轴05,轴14,轴{{1} }是2

因此,要使张量具有3的形状,只需使用(4, 5, 3)进行排列即可。

替代方法

np.transpose

documentation

中的更多说明
  

axes:整数列表,可选

     

默认情况下,反转尺寸,否则根据给定的值对轴进行排列。

答案 1 :(得分:1)

手工制作的解决方案,但是更丑。

给出输入数组:     将numpy导入为np

T = [np.array([[1, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]),
     np.array([[1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]),
     np.array([[0, 0, 1], [0, 0, 1], [1, 0, 0], [0, 1, 0]]),
     np.array([[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 1]]),
     np.array([[1, 0, 0], [1, 0, 0], [0, 0, 1], [0, 1, 0]])]

T = np.array(T)

要获取代码中显示的“第一列”:

print(T[:,0])

# [[1 0 0]
#  [1 0 0]
#  [0 0 1]
#  [0 1 0]
#  [1 0 0]]

因此,您可以使用列表推导来获得所需的结果:

np.array( [ T[:,n] for n in range(len(T[0])) ] )