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

如何用numpy.loadtxt从无分隔符TXT文件生成二维数组

用Numpy将每行连续数字的文本转换为2D浮点矩阵

问题背景

我有一个内容如下的TXT文件:

30373
25512
65332
33549
35390

希望将其转换为如下的**2D(矩阵)**浮点数组:

[[3. 0. 3. 7. 3.]
 [2. 5. 5. 1. 2.]
 [6. 5. 3. 3. 2.]
 [3. 3. 5. 4. 9.]
 [3. 5. 3. 9. 0.]]

尝试了以下代码:

import numpy as np

print(np.loadtxt('file.txt'))

得到结果:

[30373. 25512. 65332. 33549. 35390.]

不符合预期。又尝试设置delimiter='':

import numpy as np

print(np.loadtxt('file.txt', delimiter=''))

结果仍不符合要求。

[编辑]
我知道可以用原生Python实现:

array = [i.split() for i in open('file.txt').read().splitlines()]

但想了解是否可以通过Numpy实现该需求?

Numpy实现方案

方案1:利用loadtxt的converters参数

loadtxt的converters参数可以对每行数据做自定义转换,我们可以把每行的字符串拆分为单个字符,再转为浮点数:

import numpy as np

# 自定义转换器:将每行字符串拆分为单个字符并转成浮点数组
arr = np.loadtxt('file.txt', converters={0: lambda line: [float(c) for c in line.strip()]})
print(arr)

运行后会输出符合预期的5×5浮点矩阵。

方案2:读取文本后整体转换并重塑形状

先读取所有文本内容,去除换行符后将每个字符转为数字,最后通过reshape调整为目标矩阵:

import numpy as np

# 读取文件所有内容并移除换行符
raw_text = open('file.txt').read().replace('\n', '')
# 将每个字符转为浮点,再重塑为5行5列的矩阵
arr = np.array(list(raw_text), dtype=np.float64).reshape(5, 5)
print(arr)

这个方法更高效,适合数据量较大的场景。

方案3:结合genfromtxt与字符处理

用genfromtxt读取每行字符串,再通过列表推导拆分每个字符并转换:

import numpy as np

# 读取所有行作为字符串数组
str_arr = np.genfromtxt('file.txt', dtype=str)
# 拆分每个字符串为单个字符,转成浮点后生成矩阵
arr = np.array([list(line) for line in str_arr], dtype=np.float64)
print(arr)

原方法失败原因

  • 默认调用np.loadtxt('file.txt')时,Numpy会将每行的连续数字识别为一个完整数值,因此输出一维数组。
  • 设置delimiter=''无效,因为Numpy的分隔符参数不支持空字符串,它需要明确的分隔符(如逗号、空格)来拆分元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:50:25