You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取.data文件生成np.array及float64类型设置问题求助

问题解决:读取housing.data并返回指定格式的numpy数组

问题说明

需要定义loadData函数读取housing.data文件,返回包含14列(13个房屋属性+房价)的numpy数组。遇到两个问题:

  1. 原代码中y输出正常,但x输出不符合预期;
  2. 尝试在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)

解决方案

问题根源与修复

  1. x输出异常+拼接失败:
    原代码中y是一维数组(形状(n,)),x是二维数组(形状(n,13)),直接用axis=1拼接会因维度不匹配报错。同时重复读取文件两次,可能引发读取异常。
    优化方案:一次读取全部数据,再拆分x和y;将y转为二维数组后再拼接。

  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:55:32