使用np.repeat扩展数组形状时Jupyter内核崩溃求助
NumPy数组形状匹配问题解决方法
你确实误用了np.repeat函数,问题出在第二个参数b[1]:b[1]是形状为(1400,600)的数组,将其传给repeat时,NumPy会把它当作沿axis=1的每个元素需要重复的次数,这会导致生成的数组规模远超内存承载上限(计算下来元素量达到19201400600*600),直接引发Jupyter内核崩溃。
正确解决方法
方法1:用np.repeat传入重复次数
你需要沿axis=1重复1400次,直接传入整数1400即可:
import numpy as np # 原始数组 a = np.random.rand(1920, 600) # 新增axis=1维度,形状变为(1920,1,600) a_expanded = a[:, np.newaxis, :] # 沿axis=1重复1400次 a_repeated = np.repeat(a_expanded, 1400, axis=1) # 结果形状为(1920,1400,600),与b一致
方法2:用np.broadcast_to(内存友好)
如果只是需要让数组在计算时能和b广播匹配,不需要实际复制数据,优先用np.broadcast_to,它生成的是原数组的视图,不会占用额外内存:
a_broadcast = np.broadcast_to(a[:, np.newaxis, :], b.shape)
注意:该视图是只读的,若需要修改数据,改用其他方法。
方法3:用np.tile按块重复
tile按指定的块数重复数组,也能实现需求:
a_tiled = np.tile(a[:, np.newaxis, :], (1, 1400, 1))
内容的提问来源于stack exchange,提问作者MHGDRN
相关产品推荐
相关产品推荐

