Python读取.data文件生成np.array及float64类型设置问题求助
问题解决:读取housing.data并返回指定格式的numpy数组
问题说明
需要定义loadData函数读取housing.data文件,返回包含14列(13个房屋属性+房价)的numpy数组。遇到两个问题:
- 原代码中
y输出正常,但x输出不符合预期; - 尝试在
np.genfromtxt中指定dtype=np.float64或使用dataset.astype(float64),均无法将输出设置为float64类型。
原代码
import numpy as np def loadData(filename): dataset = None file = open(filename, "r") data = file.read() print(data) x = np.genfromtxt(filename, usecols = [0,1,2,3,4,5,6,7,8,9,10,11,12]) y = np.genfromtxt(filename, usecols = 13) print("x: ", x) print("y: ", y) dataset = np.concatenate((x,y), axis = 1) return dataset
修改后的代码片段
x = np.genfromtxt(filename, usecols = [0,1,2,3,4,5,6,7,8,9,10,11,12], dtype = np.float64) y = np.genfromtxt(filename, usecols = 13, dtype = np.float64)
解决方案
问题根源与修复
x输出异常+拼接失败:
原代码中y是一维数组(形状(n,)),x是二维数组(形状(n,13)),直接用axis=1拼接会因维度不匹配报错。同时重复读取文件两次,可能引发读取异常。
优化方案:一次读取全部数据,再拆分x和y;将y转为二维数组后再拼接。float64类型设置无效:
np.genfromtxt默认dtype就是float64,若数据为纯数值,无需额外指定。若仍有问题,改用np.loadtxt(专为纯数值文件设计,处理更稳定)。
修正后的完整代码
import numpy as np def loadData(filename): # 一次性读取所有数据,指定float64类型 all_data = np.loadtxt(filename, dtype=np.float64) # 拆分属性x和房价y x = all_data[:, :13] y = all_data[:, 13].reshape(-1, 1) # 拼接成14列的数据集 dataset = np.concatenate((x, y), axis=1) # 验证输出 print("x形状:", x.shape, "数据类型:", x.dtype) print("y形状:", y.shape, "数据类型:", y.dtype) print("数据集形状:", dataset.shape, "数据类型:", dataset.dtype) return dataset
简化版(直接返回完整数据集)
如果不需要单独拆分x和y,可直接读取:
import numpy as np def loadData(filename): dataset = np.loadtxt(filename, dtype=np.float64) print("数据集形状:", dataset.shape, "数据类型:", dataset.dtype) return dataset
内容的提问来源于stack exchange,提问作者user19825372
相关产品推荐
相关产品推荐

