打印和连接矩阵

时间:2015-01-26 00:58:23

标签: matlab

所以我有一个16x5矩阵,每个条目都有数字。

我想打印每一行:

1安培; 244&安培1安培; 395&安培; \ $二四六七○○\

这样我就可以复制并粘贴到乳胶中而不会伤到我的手腕。我尝试了很多东西,但没有任何作用。 dlmwrite只允许我使用1个分隔符。在最后一个条目中不需要是逗号,如果需要,我会手动执行,但我至少会喜欢其余的。

1 个答案:

答案 0 :(得分:2)

对于像这样的更复杂的打印方案,我总是选择fprintf。 如果您的矩阵为AFileID来自fopen,则可以通过

获得输出
fprintf(FileID,'%d & %d & %d & %d & \\$%d,%d \\\\ \n',A);

有关该格式字符串的更多详细信息可以是found here


由于最后一个数字应该是逗号分隔值,因此您需要将其转换为字符串。 这是该问题的解决方案。 首先,将最后一列转换为字符串的列数组并使用我编写的函数(不确定是否已存在):

Astr = num2strcomma(A(:,5));

该逗号功能

function vstr = num2strcomma(v,varargin)

    nDigits = floor(log10(v)) ; 
    nCommas = floor(nDigits/3);

    vstr = cellstr(num2str(v,varargin{:}));
    for k = 1:length(vstr)
        nstr = vstr{k};
        ind  = 1:(length(nstr)+nCommas(k));
        work = repmat(' ',1,ind(end));
        start = find(nstr == '.',1);
        if isempty(start)
            start = ind(end);
        end
        indComma  = ind(start-3:-4:1);
        indNumber = setdiff(ind,indComma);
        work(indComma)  = ',';
        work(indNumber) = nstr;
        vstr{k} = work;
    end

end

然后遍历数组

for k = 1:size(A,1)
  fprintf(FileID,'%d & %d & %d & %d & \\$%s \\\\ \n',A(k,1:4),Astr{k});
end