打印和连接矩阵
Printing and concatenating a matrix
所以我有一个 16x5 矩阵,每个条目中都有数字。
我想这样打印每一行:
1&244&1&395&\$246,700\
这样我就可以在不伤手腕的情况下复制和粘贴到乳胶中。我尝试了很多东西,但没有任何效果。 dlmwrite 只允许我使用 1 个分隔符。最后一个条目中不需要逗号,如果需要我会手动这样做,但我至少会喜欢其余的。
对于像这样更复杂的打印方案,我总是选择 fprintf
。
如果您的矩阵是 A
,其中 FileID
来自 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
所以我有一个 16x5 矩阵,每个条目中都有数字。
我想这样打印每一行:
1&244&1&395&\$246,700\
这样我就可以在不伤手腕的情况下复制和粘贴到乳胶中。我尝试了很多东西,但没有任何效果。 dlmwrite 只允许我使用 1 个分隔符。最后一个条目中不需要逗号,如果需要我会手动这样做,但我至少会喜欢其余的。
对于像这样更复杂的打印方案,我总是选择 fprintf
。
如果您的矩阵是 A
,其中 FileID
来自 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