本地VS Code运行numpy代码报形状不均错误,另一台机器正常求排查
NumPy数组转换维度不兼容错误排查
错误现象
本地VS Code运行代码时触发以下错误,但在另一台电脑上可正常执行:
ultimate = np.array(ultimate) ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (81, 2) + inhomogeneous part.
代码片段
for q in nonoutliersPos: ultimate.append(cluster0Data[q]) print('ultimate:',ultimate) ultimate = np.array(ultimate)
ultimate列表部分数据
[(array([3.72660978e+08, 4.16826783e+00, 6.76000000e-04, 0.00000000e+00, 0.00000000e+00]), 199), (array([3.72660954e+08, 4.16826783e+00, 6.76000000e-04, 0.00000000e+00, 0.00000000e+00]), 201), (array([3.72660978e+08, 4.16826783e+00, 6.76000000e-04, 0.00000000e+00, 0.00000000e+00]), 202), (array([3.72660954e+08, 4.16826783e+00, 6.76000000e-04, 0.00000000e+00, 0.00000000e+00]), 203), (array([ 2.63184231e+08, 4.16799028e+00, -7.13000000e-05, -4.55000000e-13, 0.00000000e+00]), 211), (array([ 2.63184237e+08, 4.16799028e+00, -7.13000000e-05, -4.55000000e-13, 0.00000000e+00]), 212)]
本地环境依赖版本
Package Version --------------- ------------ contourpy 1.2.0 cycler 0.12.1 et-xmlfile 1.1.0 fonttools 4.44.3 joblib 1.3.2 kiwisolver 1.4.5 matplotlib 3.8.2 networkx 3.2.1 numpy 1.24.3 openpyxl 3.1.2 packaging 23.2 pandas 2.0.3 Pillow 10.1.0 pip 22.3.1 plotly 5.18.0 pyparsing 3.1.1 python-dateutil 2.8.2 pytz 2023.3.post1 ruptures 1.1.8 scikit-fuzzy 0.4.2 scikit-learn 1.3.2 scipy 1.11.4 setuptools 65.5.0 six 1.16.0 tenacity 8.2.3 threadpoolctl 3.2.0 tzdata 2023.3
问题原因
- NumPy版本差异:本地使用NumPy 1.24.3,另一台电脑大概率是更低版本(如1.21及以下)。旧版NumPy处理包含数组和标量的元组列表时,会自动生成
dtype=object的数组,不会触发维度检查;而新版NumPy对数组维度一致性要求更严格,当检测到列表内元素结构无法构成规整多维数组时,就会抛出该错误。 - 数据结构异常:
ultimate列表中可能存在部分元组结构与示例不一致——比如某个元组内的数组长度不是5,或者元组元素数量不为2,导致整体无法转换为规整数组。
解决办法
- 统一NumPy版本:将本地NumPy降级至与另一台电脑一致的版本,或升级另一台电脑的NumPy后调整代码逻辑。
- 显式指定object类型:转换数组时明确指定
dtype=object,强制NumPy生成兼容的数组:ultimate = np.array(ultimate, dtype=object) - 检查并修正数据:遍历
ultimate列表,确认所有元组结构统一为“长度为5的数组 + 整数”的组合,剔除或修正结构异常的元素。
内容的提问来源于stack exchange,提问作者ttina
相关产品推荐
相关产品推荐

