连接的矩阵的尺寸不一致

时间:2014-12-08 16:09:13

标签: matlab

我读了一个带有textscan的csv文件,当我想在文件中写入时,我收到此错误:使用horzcat时出错。连接的矩阵的尺寸不一致。

如果我将textscan中的第一种格式(我的意思是%S)更改为%f,则错误消失。  当matlab想要[datatest {1} probability]

时会发生错误

概率是1000 * 1双倍 datatest {1}是1000 * 1 cell

datatest=textscan(FileID,'%s %*f %f %f %*s %*s %*s %*s %*s %*s %*s %*s %*s %f %f %f %f %f %f %f %f %f %f',1000,'headerlines',1,'delimiter',',');

csvwrite('output.csv',[datatest{1} probability]);

1 个答案:

答案 0 :(得分:1)

您的变量datatest{1}包含1000个单元格,每个单元格包含一个字符串(可能是或可能不是相同的长度)。

在您的语句[datatest{1} probability]中,您尝试将cells(包含字符串)与double数字类型连接起来,这不起作用。连接运算符需要对类似类型的数据进行操作。

现在,即使你要创建一个包含所有所需列myCellArray={datatest{1} probability}的单元格数组,这也无济于事,因为它的输出无法在函数csvwrite上传递。

csvwrite或更好的姐妹dlmwrite不接受单元格数组。您必须将单元格值转换为数值。不幸的是,您想要编写字符串和数值,因此您唯一的方法是使用低级函数,如fprintf

在您的情况下,要编写您期望的文件,您可以使用以下代码。

col1 = datatest{1} ;                %// extract the column of interest for easier indexing later on
fidw = fopen('output.csv','w') ;    %// get a handle on a file to write (necessary with "fprintf")
for iline = 1:numel(probability)    %// loop on each line
    fprintf( fidw , '%s, %f\n' , col1{iline} , probability(iline) ) ; %// write the line
end
fclose(fidw) ;                      %// close the file - IMPORTANT - (necessary with "fprintf")