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

如何在循环中将2D与1D NumPy数组按要求保存为多文件?

如何根据NumPy数组生成多个对应温度的数据文件?

我有三个NumPy数组:

import numpy as np

F = np.array([[-3764.9303402755891, -3764.9303494098212, -3764.9304257856452, -3764.9306329129422], 
              [-3764.9338022566421, -3764.9338129752682, -3764.9338970928361, -3764.9341184863633]])
T = np.array([[ 10., 30.1, 50.2, 70.3], 
              [ 10., 30.1, 50.2, 70.3]])
V = np.array([226.331804, 228.817957])

我需要生成4个指定格式的文件:

F_10.0K.dat: 226.331804 -3764.9303402755891 228.817957 -3764.9338022566421
F_30.1K.dat: 226.331804 -3764.9303494098212 228.817957 -3764.9338129752682
F_50.2K.dat: 226.331804 -3764.9304257856452 228.817957 -3764.9338970928361
F_70.3K.dat: 226.331804 -3764.9306329129422 228.817957 -3764.9341184863633

我之前尝试的代码只能输出所有列到一个文件,无法生成这4个单独的文件:

F_all_each_V_at_cte_T = []
for indx in range(0, cols):
    aux = F_all[:,indx]
    print ' F_all[:, indx] = ', F_all[:,indx]
    F_all_each_V_at_cte_T.append(aux)
print 'F_all_each_V_at_cte_T = ', F_all_each_V_at_cte_T
output_array = np.vstack((VOLUME_EACH, F_all_each_V_at_cte_T)).T
np.savetxt('F_vs_V_10.0K.dat', output_array, header="Volume F at 10.0K", fmt="%0.13f")

请问该如何修改代码来实现需求?


解决方案

要搞定这个需求,关键是得逐个遍历每个温度对应的列,为每一列生成单独的文件。咱们可以按下面的步骤修改代码:

  1. 先提取唯一的温度值——因为T数组的两行数据是完全重复的,直接取第一行就够了
  2. 遍历每个温度对应的列索引,把V数组的两个值和F数组对应列的两个值组合成一行数据
  3. 为每个温度生成对应的文件名,然后把组合好的数据写入文件

修正后的完整代码如下:

import numpy as np

# 定义输入数组
F = np.array([[-3764.9303402755891, -3764.9303494098212, -3764.9304257856452, -3764.9306329129422], 
              [-3764.9338022566421, -3764.9338129752682, -3764.9338970928361, -3764.9341184863633]])
T = np.array([[ 10., 30.1, 50.2, 70.3], 
              [ 10., 30.1, 50.2, 70.3]])
V = np.array([226.331804, 228.817957])

# 获取所有温度值(取第一行,因为两行完全重复)
temperatures = T[0, :]

# 遍历每个温度对应的列
for col_idx, temp in enumerate(temperatures):
    # 拼接成需要的一行数据:V[0], F[0, col_idx], V[1], F[1, col_idx]
    output_data = np.concatenate([[V[0]], [F[0, col_idx]], [V[1]], [F[1, col_idx]]])
    # 生成符合要求的文件名
    filename = f"F_{temp}K.dat"
    # 写入文件,确保格式和精度正确
    np.savetxt(filename, output_data.reshape(1, -1), fmt="%0.13f", delimiter=" ")

代码细节说明:

  • 温度提取:直接用T[0, :]拿到所有温度值,避免处理重复数据的麻烦
  • 循环遍历:enumerate能同时拿到列的索引和对应的温度值,方便我们定位F数组里的对应列
  • 数据拼接:用np.concatenate把四个数值拼成一维数组,再用reshape(1, -1)转成二维行数组,这样np.savetxt会输出成一行
  • 文件名格式化:f-string能轻松生成F_10.0K.dat这种格式的文件名,完美匹配需求
  • 输出格式:fmt="%0.13f"保证数值的精度和示例一致,delimiter=" "指定用空格分隔数据

运行这段代码后,就能自动生成你需要的4个.dat文件,每个文件的内容完全符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:24:43