Numpy数组形状转换报错:1维数组被使用2维索引访问
问题分析与解决
你的错误根源在于数组索引使用完全错误:
- 原代码
data[0, [0,2]]只取了第0行的第0、2列,得到的是1维数组(形状为(2,)),完全不符合你需要的(100,2)和(100,1)的数组形状 - 后续用这个1维数组执行
x_class0[:, 0]这类2维索引操作,自然会触发"数组是1维但使用了2个索引维度"的错误
正确的拆分代码
直接修正X_train和y_train的索引逻辑:
# X_train取所有行的前两列(对应Exam1、Exam2),形状为(100,2) X_train = data[:, [0, 1]] # y_train取所有行的第2列(对应Admission Decision),保持(100,1)的二维形状 y_train = data[:, [2]]
如果不需要严格的二维形状,也可以写成y_train = data[:, 2](此时是1维数组(100,)),后续布尔索引依然能正常工作,Numpy的广播机制会自动匹配维度。
验证与后续可视化
修改后可以先打印形状确认结果:
print("X_train shape:", X_train.shape) # 输出 (100, 2) print("y_train shape:", y_train.shape) # 输出 (100, 1)
之后的可视化代码无需修改即可正常运行:
x_class0 = X_train[y_train == 0] x_class1 = X_train[y_train == 1] plt.scatter(x_class0[:, 0], x_class0[:, 1], color='blue', label='Not Admitted') plt.scatter(x_class1[:, 0], x_class1[:, 1], color='red', label='Admitted') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者Chris Santos
相关产品推荐
相关产品推荐

