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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:24:07