numpy一维数组插入二维矩阵报错,如何实现目标数组格式?
解决方法
你遇到的问题根源是:初始创建的b = np.empty((0, ))是float类型的一维数组,它没法直接存储形状为(200,300)的二维数组元素,np.insert会尝试把二维数组广播成和原数组元素匹配的形状,所以触发了广播错误。
正确的做法是先创建object类型的空数组,再插入二维数组:
方法一:用np.insert实现插入
import numpy as np # 创建空的object类型一维数组 b = np.empty((0,), dtype=object) # 将二维数组c作为单个元素插入到首位 b = np.insert(b, 0, c) # 验证结果 print(b.shape) # 输出 (1,) print(b[0].shape) # 输出 (200,300)
方法二:用np.append简化操作
如果只是往空数组中添加第一个元素,也可以直接用np.append:
import numpy as np b = np.array([], dtype=object) b = np.append(b, c) # 验证结果一致 print(b.shape) # 输出 (1,) print(b[0].shape) # 输出 (200,300)
补充说明
你从.npz加载的数组a是object dtype的数组,每个元素都是独立的数组对象;而默认的np.empty((0,))是float64 dtype,numpy会把插入的c当成要广播成和原数组维度匹配的序列,试图把(200,300)的数组拆成200个长度为300的元素去填充,这就导致了广播错误。
内容的提问来源于stack exchange,提问作者N.Z
相关产品推荐
相关产品推荐

