如何将内部元素为ndarray的元组转换为多一维的ndarray
问题原因
你使用的np.ndarray()是NumPy数组的底层构造类,传入元组时会将其解析为数组的shape参数,而非将元组内的数组进行拼接转换,因此会触发类型不匹配的报错。
正确实现方法
要将多个形状一致的3维数组合并为4维数组,使用np.stack()即可,该函数会沿着指定的新轴对输入数组做堆叠,刚好匹配你的需求:
- 默认沿第0位新增维度,得到的4维数组形状为
(元组长度, 原3维数组维度1, 原3维数组维度2, 原3维数组维度3),示例代码:import numpy as np # a为存储多个3维ndarray的元组 a = np.stack(a) - 如果你需要将新增维度放在其他位置,可通过
axis参数指定,比如要把新维度放在最后一位:
输出数组形状为a = np.stack(a, axis=-1)(原3维数组维度1, 原3维数组维度2, 原3维数组维度3, 元组长度)。
补充说明
如果先转列表再用np.array()得到不符合预期的结果,通常是元组内的3维数组形状不完全一致,np.array()不会做严格校验,会直接生成dtype为object的一维数组;而np.stack()会强制校验所有输入数组的形状一致性,不符合要求就会明确报错,避免出现隐藏问题。
内容的提问来源于stack exchange,提问作者Игорь Доставалов
相关产品推荐
相关产品推荐

