为何代码无法为NumPy矩阵添加第三维度?如何修改实现(10,10,1)?
NumPy矩阵添加第三维度失败的原因与解决方法
你这段代码没成功给矩阵加上第三维度,核心原因其实很简单:NumPy的reshape()方法不会直接修改原数组,而是返回一个调整过形状的新数组。你只是调用了reshape()但没把这个新数组重新赋值给imm,所以原来的imm完全没变化,shape自然还是(10,10)。
先贴出你原来的代码方便对照:
import numpy as np imm = np.zeros(shape=(10,10)) dims = imm.shape if len(dims) < 3: imm.reshape((dims[0], dims[1], 1)) imm.shape # 实际输出还是(10,10)
解决方法有这几种,选你顺手的就行:
方法1:把reshape的返回值赋值给原变量
直接把reshape生成的新数组重新赋值给imm,这样原变量就指向了新的三维数组:import numpy as np imm = np.zeros(shape=(10,10)) dims = imm.shape if len(dims) < 3: imm = imm.reshape((dims[0], dims[1], 1)) print(imm.shape) # 输出(10,10,1)方法2:用
np.expand_dims()(更直观)
这个方法专门用来给数组增加维度,指定axis=-1表示在最后添加一个维度,语义非常清晰:import numpy as np imm = np.zeros(shape=(10,10)) if len(imm.shape) < 3: imm = np.expand_dims(imm, axis=-1) print(imm.shape) # 输出(10,10,1)方法3:用索引语法
[..., np.newaxis](最简洁)
这是NumPy里的实用小技巧,...表示取所有现有维度,np.newaxis会在对应位置插入一个新维度:import numpy as np imm = np.zeros(shape=(10,10)) if len(imm.shape) < 3: imm = imm[..., np.newaxis] print(imm.shape) # 输出(10,10,1)
额外补充:如果确实想尝试原地修改数组形状(这种场景不多,因为reshape能否原地修改取决于数组内存布局),可以用imm.resize((10,10,1)),这个方法会直接修改原数组,但要注意如果数组被其他变量引用可能引发意外问题,所以更推荐前面几种返回新数组的方式。
内容的提问来源于stack exchange,提问作者user3139545
相关产品推荐
相关产品推荐

