Python Numpy如何将元素数小于m*n的数组重塑为(m,n)形状
非等长二维结构转换实现方案
首先明确两个核心问题:
- 你原有代码中的
reshpae为拼写错误,正确拼写是reshape,但就算修正拼写,还是会抛出你遇到的ValueError,因为numpy的reshape方法要求原数组总元素个数和目标形状m*n完全相等,不匹配时会直接报错。 - 你期望的输出是长度不一致的嵌套列表,这种结构不符合numpy标准ndarray的要求(ndarray要求所有维度的元素长度统一),你可以根据需求选择以下两种实现方案:
方案1:直接生成嵌套列表(完全匹配期望输出)
如果不需要保留numpy数组属性,仅需要得到你给出的不规则嵌套列表格式,可以直接对原列表做切片处理:
origin_list = [1,2,3,4,5] m = 2 n = 3 reary = [origin_list[i*n : (i+1)*n] for i in range(m)] print(reary)
运行结果:
[[1, 2, 3], [4, 5]]
方案2:补填充值生成标准numpy数组
如果你需要保持numpy数组结构,可以先给原数组补默认值(比如0、NaN等)到总长度为m*n,再做reshape:
import numpy as np origin_list = [1,2,3,4,5] m = 2 n = 3 # 补0到总长度满足m*n要求 pad_length = m * n - len(origin_list) padded_list = origin_list + [0] * pad_length ary = np.array(padded_list) reary = ary.reshape(m, n) print(reary)
运行结果:
[[1 2 3] [4 5 0]]
内容的提问来源于stack exchange,提问作者Mainland
相关产品推荐
相关产品推荐

