我正在尝试将"单元格"转换为"数据集"但没有成功。我不明白发生了什么,以及为什么最明显的 Matlab 函数cell2dataset
不起作用。也许有人可以解释并帮助我使其工作......
我从csv文件加载输入数据,如下所示:
clc; clear all
filename = '/home/nlv12097/WORK/SSTA_FLOW/CADENV/work/tempus/exp2.ssta2spice/sta_ssta_spectre0/STA_timing.path_output_retime_setup_ssta_full.csv';
fid = fopen(filename); DATA = textscan(fid,'%s%f32%f32%f32%f32%s%f32%s%s%s','delimiter',',','HeaderLines',1); fclose(fid);
DATA
class(DATA)
所以输入数据如下所示:
DATA =
{9x1 cell} [9x1 single] [9x1 single] [9x1 single] [9x1 single] {9x1 cell} [9x1 single] {9x1 cell} {9x1 cell} {9x1 cell}
ans =
cell
这里需要注意的是,DATA被归类为"单元格",所以如果我想用它制作一个"数据集",cell2dataset
似乎是合适的功能。右?
DATASET1 = cell2dataset(DATA,'VarNames',{'VAR1','VAR2','VAR3','VAR4','VAR5','VAR6','VAR7','VAR8','VAR9','VAR10'})
产生以下结果:
DATASET1 =
VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8
{9x1 cell} [9x1 single] [9x1 single] [9x1 single] [9x1 single] {9x1 cell} [9x1 single] {9x1 cell}
VAR9 VAR10
{9x1 cell} {9x1 cell}
这不完全是我期望看到的。事实上,我希望我的数据集看起来像 Matlab 文档中的示例。
顺便说一句,如果我执行以下操作:
DATASET2 = mat2dataset(DATA{1},'VarNames',{'VAR1'});
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{2},'VarNames',{'VAR2'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{3},'VarNames',{'VAR3'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{4},'VarNames',{'VAR4'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{5},'VarNames',{'VAR5'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{6},'VarNames',{'VAR6'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{7},'VarNames',{'VAR7'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{8},'VarNames',{'VAR8'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{9},'VarNames',{'VAR9'}));
DATASET2 = horzcat(DATASET2,mat2dataset(DATA{10},'VarNames',{'VAR10'}))
结果符合我的预期。
DATASET2 =
VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8 VAR9
'path4_spi' 57.2 258.2 55.2 3697.3 '89.954 | 40.539' 5000 '3697.299 | 321.456' '4965.247 | 25.811'
'path9_spi' 57.2 258.2 54 3418.8 '90.849 | 40.535' 5000 '3418.800 | 303.210' '4963.150 | 25.804'
'path7_spi' 57.2 258.2 54.2 3483.7 '89.849 | 40.535' 5000 '3483.699 | 309.051' '4964.351 | 25.804'
'path2_spi' 57.2 258.2 55.4 3842.5 '90.758 | 40.554' 5000 '3842.499 | 327.933' '4964.643 | 25.817'
'path8_spi' 57.2 258.2 52.9 3425.2 '89.887 | 40.501' 5000 '3425.200 | 304.215' '4963.013 | 25.786'
'path6_spi' 57.2 258.2 54.4 3629.9 '89.649 | 40.535' 5000 '3629.900 | 316.270' '4964.750 | 25.804'
'path1_spi' 57.2 258.2 55.4 3969.9 '89.658 | 40.554' 5000 '3969.899 | 333.525' '4965.742 | 25.817'
'path3_spi' 57.2 258.2 55.3 3820.1 '89.358 | 40.554' 5000 '3820.100 | 326.701' '4965.942 | 25.817'
'path5_spi' 57.2 258.2 52.7 3623.9 '89.533 | 40.497' 5000 '3623.899 | 316.809' '4963.167 | 25.780'
VAR10
'1267.947 | 322.681'
'1544.351 | 304.491'
'1480.652 | 310.312'
'1122.143 | 329.143'
'1537.813 | 305.491'
'1334.850 | 317.512'
'995.843 | 334.723'
'1145.842 | 327.914'
'1339.268 | 318.047'
但我不喜欢这种方法,因为它可能涉及代码行。所以我被困在这里。我不知道如何正确使用cell2dataset
,我需要帮助。
Q1:有人愿意解释为什么DATASET1和DATASET2不同吗?
Q2:最重要的是如何使用cell2dataset
函数获得DATASET2结果?
我很抱歉问了一个愚蠢的问题。
在阅读了更多的 Matlab 文档后,我找到了更好的解决方案。实际上,可以直接从输入文件创建数据集。
DATASET3 = dataset('File','/home/nlv12097/WORK/SSTA_FLOW/CADENV/work/tempus/exp2.ssta2spice/sta_ssta_spectre0/STA_timing.path_output_retime_setup_ssta_full.csv','Delimiter',',')
DATASET3 =
Path_Name LaunchFF_CPpin_Time LaunchFF_Qpin_Time CaptureFF_CPpin_Time CaptureFF_Dpin_Time CaptureFF_Response_Time Phase_Shift
'path4_spi' 57.2 258.2 55.2 3697.3 '89.954 | 40.539' 5000
'path9_spi' 57.2 258.2 54 3418.8 '90.849 | 40.535' 5000
'path7_spi' 57.2 258.2 54.2 3483.7 '89.849 | 40.535' 5000
'path2_spi' 57.2 258.2 55.4 3842.5 '90.758 | 40.554' 5000
'path8_spi' 57.2 258.2 52.9 3425.2 '89.887 | 40.501' 5000
'path6_spi' 57.2 258.2 54.4 3629.9 '89.649 | 40.535' 5000
'path1_spi' 57.2 258.2 55.4 3969.9 '89.658 | 40.554' 5000
'path3_spi' 57.2 258.2 55.3 3820.1 '89.358 | 40.554' 5000
'path5_spi' 57.2 258.2 52.7 3623.9 '89.533 | 40.497' 5000
Arrival_Time Required_Time Slack_Time
'3697.299 | 321.456' '4965.247 | 25.811' '1267.947 | 322.681'
'3418.800 | 303.210' '4963.150 | 25.804' '1544.351 | 304.491'
'3483.699 | 309.051' '4964.351 | 25.804' '1480.652 | 310.312'
'3842.499 | 327.933' '4964.643 | 25.817' '1122.143 | 329.143'
'3425.200 | 304.215' '4963.013 | 25.786' '1537.813 | 305.491'
'3629.900 | 316.270' '4964.750 | 25.804' '1334.850 | 317.512'
'3969.899 | 333.525' '4965.742 | 25.817' '995.843 | 334.723'
'3820.100 | 326.701' '4965.942 | 25.817' '1145.842 | 327.914'
'3623.899 | 316.809' '4963.167 | 25.780' '1339.268 | 318.047'