Numpy一维数组转二维失败求助:reshape后形状未改变
问题分析与解决方法
嘿,这是个很常见的numpy新手误区~咱们来拆解下问题:
你当前代码里的np.reshape()其实不会直接修改原数组mask——它的作用是生成一个经过重塑的新数组,但你没有把这个新数组的结果赋值回mask,所以原来的一维数组根本没发生变化,输出自然还是(2940000,)。
两种修正方案
方案1:将reshape的结果赋值回原变量
这是最常用的方式,直接把重塑后的新数组重新赋值给mask:
import numpy as np mask = np.zeros(1400*2100, dtype=np.uint8) # 把reshape的结果赋值给mask mask = np.reshape(mask,(1400,2100), order='F') # 或者用更简洁的数组方法形式 # mask = mask.reshape(1400,2100, order='F') print(mask.shape) # 现在会输出 (1400, 2100)
方案2:使用resize()直接修改原数组
如果你想直接在原数组上修改形状(不生成新数组),可以用resize()方法,注意需要加上refcheck=False参数(避免因数组引用检查导致的报错):
import numpy as np mask = np.zeros(1400*2100, dtype=np.uint8) mask.resize((1400,2100), refcheck=False) print(mask.shape) # 同样会输出 (1400, 2100)
简单总结下:reshape()是“返回新数组”,resize()是“修改原数组”,根据你的需求选就行~
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

