如何使用numpy.savetxt向文本文件同时写入整数与浮点数?
如何用numpy.savetxt同时写入整数与浮点数
当然可以做到!你遇到的问题是因为numpy数组默认会统一数据类型——当你的列表里同时有整数和浮点数时,numpy会把整个数组的类型转为浮点数,再加上你用了fmt="%s",最终写入文件时整数就变成了浮点数形式。下面给你几个实用的解决办法:
方法1:直接指定多列格式字符串
最直接的方式就是在np.savetxt的fmt参数里,为每一列单独指定格式。比如你的数据有两列,第一列是整数,第二列是浮点数,就可以这样写:
import numpy as np c = 0 a = [] for i in range(1, 16): b = i / 10 c += 1 a.append([c, b]) # 第一列用整数格式%d,第二列用一位小数的浮点数格式%.1f np.savetxt('test.txt', a, delimiter=" ", fmt="%d %.1f")
这样写入test.txt后,第一列会保持整数形式,第二列是浮点数,完美符合你的需求。
方法2:使用结构化数组(Structured Array)
如果你的数据列类型差异较大,或者需要更严格的类型控制,可以创建结构化数组,明确每一列的数据类型:
import numpy as np # 创建一个包含15行的结构化数组,指定两列的类型:count为整数,value为浮点数 data = np.zeros(15, dtype=[('count', int), ('value', float)]) for idx in range(15): data['count'][idx] = idx + 1 data['value'][idx] = (idx + 1) / 10 # 写入时指定对应格式,或者让numpy自动适配 np.savetxt('test.txt', data, delimiter=" ", fmt="%d %.1f")
结构化数组允许每列拥有独立的数据类型,从根源上避免了类型统一的问题,适合更复杂的数据场景。
为什么原来的代码会出问题?
你原来的列表a被numpy转为数组时,因为同时包含整数和浮点数,numpy会自动将整个数组的 dtype 设为float64,所以即使c是整数,存入数组后也会变成浮点数。再加上fmt="%s"的字符串格式化,最终写入文件的就是浮点数形式了。
内容的提问来源于stack exchange,提问作者Aim
相关产品推荐
相关产品推荐

