我有一个数组列表
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)
?
答案 0 :(得分:2)
使用以下内容
np.transpose(T, (1, 0, 2))
第二个参数指的是张量轴的位置。由于T
的形状为(5, 4, 3)
,这意味着轴0
是5
,轴1
是4
,轴{{1} }是2
。
因此,要使张量具有3
的形状,只需使用(4, 5, 3)
进行排列即可。
替代方法
np.transpose
中的更多说明
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])) ] )