如何用Numpy更高效读取文本文件中的矩阵?
快速读取自定义格式矩阵到NumPy的方法
嘿,我来给你推荐个更高效简洁的方法,不用再手动繁琐分割啦!针对你这种用[ ... ]包裹的多组空格分隔数字的文本格式,我们可以结合正则表达式和NumPy的内置方法快速搞定。
实现步骤与代码
import numpy as np import re # 1. 读取文本文件内容 with open('matrix.txt', 'r') as f: content = f.read() # 2. 提取所有方括号内的数字块 # 用正则匹配[和]之间的所有内容(非贪婪模式避免匹配到多个块) num_groups = re.findall(r'\[(.*?)\]', content) # 3. 转换为NumPy二维数组 # 对每个数字组,用np.fromstring直接转成一维数组,再组合成二维数组 final_matrix = np.array([np.fromstring(group, sep=' ') for group in num_groups]) print(final_matrix)
代码解释
- 正则提取:
re.findall(r'\[(.*?)\]', content)会精准提取每个[ ]包裹的数字字符串,得到两个元素的列表,比如[' 1 2 3 ... 13', ' 14 15 ... 23'] - NumPy快速转换:
np.fromstring(group, sep=' ')是NumPy专门用来处理空格分隔数字字符串的高效方法,省去了手动分割、类型转换的繁琐步骤,直接生成一维数组 - 组合成二维数组:通过列表推导式把所有一维数组组合起来,直接得到你需要的二维NumPy数组格式
运行这段代码后,输出的结果就是你期望的:
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.] [14. 15. 16. 17. 18. 19. 20. 21. 22. 23.]]
如果你的矩阵里都是整数,还可以加上dtype=int参数,让数组类型更准确:
final_matrix = np.array([np.fromstring(group, sep=' ', dtype=int) for group in num_groups])
这样得到的就是整数类型的二维数组啦!
内容的提问来源于stack exchange,提问作者Rushi Jae
相关产品推荐
相关产品推荐

