我有一个特定的数据文件,共有 7 列:1 列时间和 6 列数据。如我所附的图像所示,第一列代表时间,而接下来的四列代表数据。似乎从第 4 列数据开始,它用一个黑色的向上小箭头包裹到底部,然后再次及时重复为第一列,剩下的两个数据列代表第 5 列和第 6 列数据。
我无法使用
np.loadtxt
在 python 中加载数据。如何在正确访问和提取数据的第 5 列和第 6 列的同时加载数据?我想最终将其推广到 400 列数据。
我尝试过
data = np.loadtxt('temp_59324.dat',delimiter = None)
并且它返回一个错误。如果我只要求总共 5 列数据(1 列时间,4 列实际数据),那么
np.loadtxt
会正确加载。但除 5 之外的任何值都会导致错误
import numpy as np
def load_wrapped_data(filename, n_columns):
"""从包含包装列数据的文件中加载数据。
Args:
filename: 数据文件的名称。
n_columns: 数据总列数(包括时间列)。
Returns:
包含数据的 NumPy 数组。
"""
# 加载数据,将包装列视为单独的行
data = np.loadtxt(filename, delimiter=None)
# 计算包装列中的行数
n_wrapped_rows = (n_columns - 1) // 4
# 将数据重塑为具有正确列数的二维数组
data = data.reshape(-1, n_columns)
return data
# 示例用法:
filename = 'temp_59324.dat'
n_columns = 7 # 总列数,包括时间列
data = load_wrapped_data(filename, n_columns)
# 现在,可以通过切片访问数据,例如:
time = data[:, 0] # 时间列
data_column_5 = data[:, 4] # 第 5 列数据
data_column_6 = data[:, 5] # 第 6 列数据
# 打印加载的数据
print(data)
说明:
- 识别包装模式: 此代码假定数据在每组 4 列数据后包装。这意味着除时间列外,每 4 列构成一组完整的数据列。
-
加载为平面数组:
np.loadtxt
最初将数据加载为平面数组,将包装列视为单独的行。 -
重塑数组:
代码根据总列数 (
n_columns
) 和包装模式计算包装列中的行数 (n_wrapped_rows
)。然后,它使用reshape
将平面数组转换为具有正确列数的二维数组。 - 数据访问: 加载数据后,可以使用切片轻松访问任何列,包括第 5 列和第 6 列。
此代码可用于任意数量的包装列,只需更新
n_columns
变量以反映数据中的总列数。例如,对于 400 列数据,可以使用
n_columns = 401
(包括 1 列时间)。