显示圆角矩阵

时间:2017-06-30 16:27:28

标签: string matlab matrix vector

我想显示具有预定义精度的矢量。例如,让我们考虑以下向量,

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(loggerContext);
configurator.doConfigure(this.getClass().getResource("/logback-config.groovy"));

如果我打电话,

v = [1.2346    2.0012    0.1230    0.0001    1.0000]

输出应该是,

mat2str(v, 1);

如果我打电话,

1.2    2.0    0.1    0.0    1.0

输出应该是,

mat2str(v, 2)

等等。

我尝试了这段代码,但结果是一个空矩阵:

1.24    2.00    0.12    0.00    1.00

如何显示具有预定义小数位数的矢量?

4 个答案:

答案 0 :(得分:3)

format specifier for sprintf已经提供了一种简单的方法,可以使用*作为精度字段并将该值作为参数传递给sprintf。因此,您的函数(我重命名为mat2prec)可以写成如下:

function s = mat2prec(mat, precision)
  s = sprintf('%.*f', precision, mat);
end

答案 1 :(得分:1)

function roundedmat2str(X,N)
    NN = num2str(N); % Make a number of the precision
    for ii = size(X,1):-1:1
        out(ii,:) = sprintf(['%.' NN 'f \t'],X(ii,:)); % create string
    end
    disp(out)
end


X=magic(3)+rand(3);N=2;
MyRounding(X,N)
8.69    1.03    6.77    
3.32    5.44    7.80    
4.95    9.38    2.19

X = X(:).'; 
MyRounding(X,N)
8.69    3.32    4.95    1.03    5.44    9.38    6.77    7.80    2.19    

请注意,sprintffprintf在设置小数位时已经进行了隐式舍入。

另外:请不要将现有的函数名称用于您自己的函数或变量。永远不要拨打金额sum,平均mean或mat2str mat2str。执行totalaverageroundedmat2str等操作。这使您的代码可移植,并确保您在使用自己的函数时不会出错,但期望默认值,反之亦然。

答案 2 :(得分:1)

这个可以在我的Matlab 2014b上运行:

function s = mat2str(mat, precision)
    printstring=strcat('%',num2str(precision),'.',num2str(precision),'f','\t');
    s = sprintf(printstring, round(mat, precision));
end

答案 3 :(得分:1)

我认为这首先是你想做的事情:

s = sprintf(sprintf('%%.%df ', precision), mat)

修改

如果你想将问题扩展到矩阵,你可以使用这个稍微复杂的单行代码:

s = sprintf([repmat(sprintf('%%.%df ', precision), 1, size(mat, 2)) '\n'], mat')

与之前的单行有一个显着不同的地方是它以回车结束。