Борьба с функцией Matlab cell2dataset
Я пытаюсь преобразовать "ячейку" в "набор данных", но безуспешно. Я не понимаю, что происходит и почему наиболее очевидна функция 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: И самое главное, как получить результат DATASET2, используя cell2dataset
функционировать?
1 ответ
Я прошу прощения за то, что задал глупый вопрос.
После прочтения дополнительной документации 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'