需要使用python将矩阵转换成三列的数据列表。
原始矩阵以Freq.[Hz]为横轴,以分贝数为纵轴,不同温度形成不同的曲线如下图所示:
希望转换成第一列频率(Freq。[Hz]),第二列温度,第三列分贝(dB)。
谢谢
需要使用python将矩阵转换成三列的数据列表。
原始矩阵以Freq.[Hz]为横轴,以分贝数为纵轴,不同温度形成不同的曲线如下图所示:
希望转换成第一列频率(Freq。[Hz]),第二列温度,第三列分贝(dB)。
谢谢
你的数据文件有些小问题,大致处理的程序如下。
数据文件 dataM 的形状是 (303104,3),第一列是 Freq,第二列是 Temp,第三列是 Noise
import pandas as pd
import numpy as np
# 读取数据文件
readPath = "../data/StripLA01SD1.txt" # 数据文件的地址和文件名
dfFile = pd.read_table(readPath, sep="|", header=0) # 间隔符为空格,首行为标题行
dfData = dfFile.loc[:, ~dfFile.columns.str.contains("Unnamed")] # 删除 "Unnamed" 列
print(dfData.head()) # 显示 dfData 前 5 行数据
rows, cols = dfData.shape
print("rows={}, cols={}".format(rows, cols)) # 8192, 38
data = dfData.to_numpy()
title = dfData.columns.values
temp = []
for i in range(1, cols):
temp.append(eval(title[i]))
lens = len(temp)
# print("Temp", temp)
print("len(Temp)", lens)
datM = np.zeros((rows * lens, 3)) # rows=8192, lens=37
print("datM", datM.shape) # 8192*37=303104
for l in range(lens):
for row in range(rows):
datM[l * (rows) + row, 0] = data[row, 0] # Freq
datM[l * (rows) + row, 1] = temp[l]
datM[l * (rows) + row, 2] = data[row, l+1]
print(datM[:10, :])
print("Freq: min={:.1f}, max={:.1f}".format(datM[:, 0].min(), datM[:, 0].max()))
print("Temp: min={:.1f}, max={:.1f}".format(datM[:, 1].min(), datM[:, 1].max()))
print("Noise: min={:.1f}, max={:.1f}".format(datM[:, 2].min(), datM[:, 2].max()))