Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在MATLAB中使用xlswrite_Excel_Matlab - Fatal编程技术网

Excel 在MATLAB中使用xlswrite

Excel 在MATLAB中使用xlswrite,excel,matlab,Excel,Matlab,我正在使用MATLAB中的三个数据集,例如 日期: 有D日期是每个字符,但保存在单元格数组中 {'01-May-2019','02-May-2019','03-May-2019'....} {'A','B','C',...} 标签: 有100个标签,每个标签都是字符串,但保存在单元格数组中 {'01-May-2019','02-May-2019','03-May-2019'....} {'A','B','C',...} 值: [0, 1, 2,...] 这是一行大小为D×100的值

我正在使用MATLAB中的三个数据集,例如

  • 日期:
    D
    日期是每个字符,但保存在单元格数组中

    {'01-May-2019','02-May-2019','03-May-2019'....}
    
    {'A','B','C',...}
    
  • 标签:
    100个标签,每个标签都是字符串,但保存在单元格数组中

    {'01-May-2019','02-May-2019','03-May-2019'....}
    
    {'A','B','C',...}
    
  • 值:

    [0, 1, 2,...]
    
    这是一行大小为
    D×100
    矩阵

  • 我希望在Excel中获得以下输出:

    date            labels     Values
    
    01-May-2019       A           0
    01-May-2019       B           1
    01-May-2019       C           2
    
    直到同一日期重复100次。然后,下一个日期与第二列中的100个标签以及第二行的
    矩阵在第三列中转置的新值一起添加到下一行(+重复100次)。重复此操作,直到达到日期长度
    D

    第一次约会,我用了:

    c_1 = {datestr(datenum(dates(1))*ones(100,1))}
    c_2 = labels
    c_3 = num2cell(Values(1,:)')
    xlswrite('test.xls',[c_1, c_2, c_3])
    
    但是,不幸的是,这似乎将所有内容都放在了一列中,即日期,然后是标签,然后是值数组的第一行。我需要把它们分成三列

    此外,我认为,在我考虑的每一天中,上述内容都需要在
    for
    循环中。我尝试使用
    函数,但是运气不太好

    如何有效地解决此问题?

    您可以使用和构建列,并(可选)将它们添加到表中进行导出

    例如:

    dates = {'01-May-2019','02-May-2019'};
    labels = {'A','B', 'C'};
    values = [0, 1, 2];
    
    n_dates = numel(dates);
    n_labels = numel(labels);
    
    dates_repeated = reshape(repmat(dates, n_labels, 1), [], 1);
    labels_repeated = reshape(repmat(labels, n_dates, 1).', [], 1);
    values_repeated = reshape(repmat(values, n_dates, 1).', [], 1);
    
    full_table = table(dates_repeated, labels_repeated, values_repeated);
    
    给我们下表:

    >> full_table
    
    full_table =
    
      6×3 table
    
        dates_repeated    labels_repeated    values_repeated
        ______________    _______________    _______________
    
        '01-May-2019'           'A'                 0       
        '01-May-2019'           'B'                 1       
        '01-May-2019'           'C'                 2       
        '02-May-2019'           'A'                 0       
        '02-May-2019'           'B'                 1       
        '02-May-2019'           'C'                 2   
    
    应根据需要将其导出到电子表格

    我们使用
    repmat
    重塑
    所做的是“叠加”值,然后将它们转换为单个列:

    >> repmat(dates, n_labels, 1)
    
    ans =
    
      3×2 cell array
    
        {'01-May-2019'}    {'02-May-2019'}
        {'01-May-2019'}    {'02-May-2019'}
        {'01-May-2019'}    {'02-May-2019'}
    
    我们转置标签和值,使它们交织在一起(例如
    [0,1,0,1]
    vs
    [0,0,1,1]
    ),因为
    repmat
    是主要列


    如果不需要中间表,可以使用从
    值创建单元格数组,以便将所有3个单元格数组连接在一起(或者,在R2019a中添加,这也不推荐
    xlswrite
    ):


    谢谢你的帮助!由于值是一个(D x 100)数组,是否可以修改您的
    值\u repeated
    行,以便我可以为正在考虑的每个日期
    D
    提取
    值(D,:)'
    ?Typerhaps我可以只写
    values\u repeated=重塑(values',[],1)?基本上,这将转置所有的值行,并将它们组合成一个单独的列向量?对不起,我错过了那部分。后者是正确的,是的。非常感谢您的优雅的解决方案!