Neil.Liu 2023-01-25 09:03 采纳率: 57.1%
浏览 82
已结题

使用#python#解决矩阵的转换问题。

需要使用python将矩阵转换成三列的数据列表。

原始矩阵以Freq.[Hz]为横轴,以分贝数为纵轴,不同温度形成不同的曲线如下图所示:

img

img

希望转换成第一列频率(Freq。[Hz]),第二列温度,第三列分贝(dB)。

数据原始文件

谢谢

  • 写回答

6条回答 默认 最新

  • youcans_ 人工智能领域优质创作者 2023-01-25 10:33
    关注

    你的数据文件有些小问题,大致处理的程序如下。
    数据文件 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()))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 阳光宅男xxb 2023-01-25 09:45
    关注

    根据您描述的问题,需要使用python将矩阵转换为具有三列的数据列,一列是Freq.[Hz] 一列是分贝数,一列是温度,从我对你的问题和需求的理解来看,最后的结构应该是每个Freq[Hz]会对应一列分贝数和一列温度,大概结构如下:
    Fre.[Hz] 温度 分贝数
    1501.160 -13.53 60
    1501.160 -10.53 57
    1501.160 -23.53 55

    对于这样的数据的处理,建议使用python中的pandas进行处理,可以使用dataframe结构进行存储。

    评论
  • Jackyin0720 2023-01-25 11:18
    关注

    用Tolist()方法将数组或矩阵转换为列表,提供参考实例:https://www.zkxjob.com/47166

    评论
  • 东方佑 2023-01-26 10:41
    关注
    import pandas as pd
    
    # data=pd.read_csv("你的数据")
    # 我new 的数据
    # 方法1 循环
    data = pd.DataFrame({"Fr": [1123, 1124], "Tem": [60, 60], "57": [-13, -14], "56": [-12, -12]})
    new_data=[]
    for group_id, group_data in data.groupby(["Fr", "Tem"]):
        db_values = group_data.values[:, 2:].reshape(-1)
        db_name = group_data.columns.values[2:]
        data_one=pd.DataFrame(
            {"Fr": group_data["Fr"].values.tolist() * db_name.size, "Tem": group_data["Tem"].values.tolist() * db_name.size,
             "db_name":db_name, "db_values": db_values})
        new_data.append(data_one)
    pd.concat(new_data).to_csv("new_data.csv",index=False)
    #方法2 批量
    db_name=data.columns.values[2:]
    db_name=db_name.tolist()*data.shape[0]
    db_values=data.values[:, 2:].reshape(-1)
    data_one=pd.DataFrame(
            {"Fr": data["Fr"].values.tolist()*db_name.size, "Tem": data["Tem"].values.tolist() * db_name.size,
             "db_name":db_name, "db_values": db_values})
    data_one.to_csv("new_data_one.csv",index=False)
    
    
    
    

    你这个数据要是展开需要四个字段才能表达的清楚数据全部信息 写了两个方法 提供参考 一个是循环 合并 一个是批量处理

    评论
  • heart_6662 2023-01-25 09:30
    关注

    我写了个简单的例子

    
    import numpy as np
    # 定义原始矩阵
    matrix = [[1,2,3,4,5],
              [6,7,8,9,10],
              [11,12,13,14,15]]
    # 转换为三列的数据列表
    data_list = np.reshape(matrix, (-1, 3))
    
    评论
  • Monster-XH 2023-01-25 09:51
    关注

    首先,假设你有一个二维数组,存储了频率和分贝数的值,如下所示:

    matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    
    
    

    你可以使用 reshape() 函数将矩阵转换为三列的数据列表。
    如下:

    data_list = matrix.reshape(-1, 3)
    
    
    

    这样会将原来的每一行看作一组数据,每一行的三个元素分别对应 Freq.[Hz],分贝数和温度

    如果你需要对数据进行更细致的处理,可以使用 numpy 的其他函数,例如:

    np.column_stack() 可以将多个一维数组按列堆叠在一起。
    np.concatenate() 可以将多个数组沿指定轴连接在一起。
    如果你需要存储数据到文件中,你可以使用 numpy 的 savetxt() 函数将数据保存到文本文件中,或者使用 np.save() 函数将数据保存到二进制文件中。

    np.savetxt("data.txt", data_list, delimiter=",")
    # or 
    np.save("data.npy", data_list)
    
    
    

    示例:

    import numpy as np
    
    # 假设原始矩阵是 matrix
    matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    
    # 将矩阵转换为三列数据列表
    data_list = matrix.reshape(-1, 3)
    
    print(data_list)
    # 输出: [[1 2 3]
    #           [4 5 6]
    #           [7 8 9]]
    
    
    

    、、回答有用请你采纳、

    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 求制作一个个人网页,
  • ¥15 寻涂色内存脚本作者有项目有市场有资源.却技术
  • ¥15 蓝桥杯c51单片机问题
  • ¥15 ajax跨域问题请求修改代码
  • ¥15 python matplotlib
  • ¥15 短信测压+语音,有偿,必须用Python
  • ¥20 COCOS2DX的protobuf协议注册函数问题
  • ¥15 (标签-Pytorch|关键词-Stream)
  • ¥15 求深圳2019年开放数据应用创新大赛的营运车辆数据!
  • ¥15 软件UI界面绘制折线图