如何在NumPy中从矩阵列表创建指定维度的张量?
解决方案
使用numpy.stack()并指定axis=2参数,即可将多个同维度矩阵按第三个维度拼接成目标张量,完美适配你不确定矩阵数量的场景。
基础示例代码
import numpy as np A = np.random.rand(3,2) B = np.random.rand(3,2) C = np.random.rand(3,2) # 按第三个维度堆叠矩阵 T = np.stack([A, B, C], axis=2)
验证结果:
print(T.shape) # 输出 (3, 2, 3) print(np.array_equal(T[:,:,0], A)) # 输出 True,确认T[:,:,0]等于A print(np.array_equal(T[:,:,1], B)) # 输出 True,确认T[:,:,1]等于B print(np.array_equal(T[:,:,2], C)) # 输出 True,确认T[:,:,2]等于C
动态矩阵数量的处理
如果运行前不确定矩阵数量,只需先将所有矩阵收集到列表中,再传入np.stack()即可:
import numpy as np # 初始化列表用于收集矩阵 matrix_collection = [] # 模拟动态添加矩阵(可根据实际逻辑替换) matrix_collection.append(np.random.rand(3,2)) matrix_collection.append(np.random.rand(3,2)) # 可继续添加更多矩阵... # 按第三个维度堆叠所有收集到的矩阵 T = np.stack(matrix_collection, axis=2) print(T.shape) # 输出 (3, 2, N),N为收集到的矩阵数量
为什么原方法不符合需求
np.array([A,B,C])会默认将列表中的每个矩阵作为第一个维度的元素,因此得到的张量维度是(3, 3, 2),而np.stack()通过axis参数指定堆叠的轴,axis=2就是在第三个维度上完成拼接,正好匹配你想要的3x2xN结构。
内容的提问来源于stack exchange,提问作者Johndoe
相关产品推荐
相关产品推荐

