如何将Numpy生成的完整NxM数组按指定格式写入ASCII文件?
完整输出Numpy数组到指定格式ASCII文件的解决方法
你遇到的数组内容被截断问题,根源是直接用str(mat)转换Numpy数组时,Numpy默认会对元素数量较多的数组进行截断显示(用...代替部分内容),导致写入文件后内容不完整。以下是两种可靠的解决方法:
方法一:调整Numpy打印选项输出完整数组
通过设置Numpy的打印参数,强制输出完整的数组内容,再进行格式处理:
import numpy as np # 配置Numpy打印选项,关闭数组截断(threshold设为无穷大) np.set_printoptions(threshold=np.inf) mat = np.random.random((73,92)) rows, cols = mat.shape # 生成指定格式的头部(列数 行数) header = f"{cols}\t{rows}\n" # 将数组转为字符串后清理格式:移除方括号,替换空格为制表符,修正换行格式 content = str(mat).replace('[', '').replace(']', '').replace(' ', '\t').replace('\n\t', '\n') # 写入文件(用with语句自动管理文件句柄,避免遗漏关闭) with open('./output_file.dat', "w+") as mat_file: mat_file.write(header) mat_file.write(content)
方法二:使用Numpy自带的savetxt函数(推荐)
np.savetxt是Numpy专门为数组写入文本文件设计的函数,无需手动处理字符串,效率更高且格式控制更精准:
import numpy as np mat = np.random.random((73,92)) rows, cols = mat.shape # 先写入头部,再用savetxt写入数组内容 with open('./output_file.dat', "w+") as mat_file: # 写入维度信息(列数 行数) mat_file.write(f"{cols}\t{rows}\n") # 写入数组:指定制表符分隔,设置数值格式避免截断或科学计数法 np.savetxt(mat_file, mat, delimiter='\t', fmt='%.18g')
关键说明
- 原方法中
str(mat)被截断的原因:Numpy默认的threshold参数值为1000,当数组元素总数超过这个值时,就会自动截断显示,导致转换后的字符串不完整。 - 方法二中的
fmt='%.18g'是通用的数值格式化方式,既能保留足够精度,又能避免不必要的科学计数法,你也可以根据需求调整为其他格式(比如'%.6f'保留6位小数)。
内容的提问来源于stack exchange,提问作者cavereaper
相关产品推荐
相关产品推荐

