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

Python新手:从文件读取双列数据并拆分至两个独立数组的报错及数据类型问题

搞定numpy加载文件的两个问题:拆分数组与字符串类型

嘿,作为Python新手遇到这种numpy的小坑很正常,我来一步步帮你解决:

1. 为什么x,y = np.loadtxt(...)会报错?

当你用dtype=[('mystring','S4'),('myint','i8')]时,np.loadtxt返回的是一个结构化数组,它本质是包含8行数据的数组,而不是两个独立的数组——你用x,y去解包,相当于要把8个元素拆成2个,自然会报ValueError: too many values to unpack。

有两种方式解决拆分问题:

方式一:先读结构化数组,再提取字段

先把整个数据读成结构化数组,再通过字段名分别取出两列:

import numpy as np

# 注意把'S4'改成'U4',后面会说原因
data = np.loadtxt("Equadgrams.txt", dtype=[('mystring', 'U4'), ('myint', 'i8')])

# 提取两个独立数组
grams = data['mystring']
counts = data['myint']

方式二:用unpack=True直接拆分

如果想一步到位,不用结构化dtype,直接指定两个类型,再加上unpack=True参数,让numpy自动把每一列拆成独立数组:

import numpy as np

grams, counts = np.loadtxt("Equadgrams.txt", dtype=('U4', 'i8'), unpack=True)

2. 为什么字符串是b'TION'类型?

你用的'S4'是numpy的字节字符串类型(对应numpy.bytes_),这是Python 2的遗留类型。在Python 3中,我们需要用'U4'(U代表Unicode字符串,4是字符串最大长度)作为dtype,这样读取出来的就是普通的Python str类型,不会带b前缀了。

最终效果验证

用上面的代码处理你的文件后,grams会是:

array(['TION', 'NTHE', 'THER', 'THAT', 'OFTH', 'FTHE', 'THES', 'WITH'],
      dtype='<U4')

counts会是:

array([13168375, 11234972, 10218035,  8980536,  8132597,  8100836,
        7717675,  7627991])

完全符合你要的两个独立数组的需求~

内容的提问来源于stack exchange,提问作者ATYslh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:42:37