【问题标题】:Matlab command window output of matrix values does not match output in file矩阵值的Matlab命令窗口输出与文件中的输出不匹配
【发布时间】:2015-04-23 14:11:16
【问题描述】:

我有一个非常大的矩阵,想在继续使用它之前在屏幕上查看它。现在,当显示它时,这些值完全错误(相差 100 倍),但是当我将它们打印到文件时,一切都很好。 (我很想在这里发布一张照片,但我没有足够的声誉......)这是代码:

disp(bigMatrix) %does not work the way I expected

for i = 1:size(bigMatrix, 1)                     %from here to
    for j = 1:size(bigMatrix, 2)                 %
        fprintf(fileOne, '%f', bigMatrix(i,j));  %
        fprintf(fileOne, '\t');                  %
    end                                          %
    fprintf(fileOne, '\r\n');                    %
end                                              %here everything is perfect

因此,在我的文件中,每列末尾都有一个 1,其中 disp() 函数(或者只是输入我的矩阵的名称)给了我一个 0.0010。所有其他值也都是错误的,因此可能是格式问题。关于发生了什么的任何想法?

【问题讨论】:

  • 您似乎正在尝试将矩阵保存到文件中。为什么不使用save 函数?
  • 请验证我的解决方案,如果有问题请告诉我!
  • 呸,我去,对不起,这里是午餐时间...^^

标签: matlab matrix


【解决方案1】:

这是一个格式问题:因为矩阵太大,我无法滚动到 Matlab 标准格式的开头

format short

宣布我的结果是

bigMatrix =

             1.0e+03 *

              [...bigMatrix...]

所以底部的值看起来是错误的,尽管它们不是。将格式更改为

format short g

成功了。

【讨论】:

  • 当好,你还能为我对帖子细节/努力的回答投票吗? XD
  • @krisdestruction 当然,你只是给了我足够的声誉来这样做.... :D 啊,不,它需要 15 个,所以....一旦我有了它们^^跨度>
【解决方案2】:

如果您只是想将变量名保存为可读格式,您应该查看dlmwrite 函数。它会在您的情况下使用分隔符、空格或制表符保存您的变量。

bigMatrix = rand(10);
dlmwrite('myFile.txt',bigMatrix,'delimiter',' ');

如果你想使用制表符分隔,你可以使用以下行

dlmwrite('myFile.txt',bigMatrix,'delimiter','\t')

如果您想进一步指定精度,可以使用以下代码指定precision = 3 sig figs。

dlmwrite('myFile.txt',bigMatrix,'delimiter','\t','precision',3)

此外,您可以使用字符串指定恒定精度以获得恒定的十进制精度。指定4f 将提供您在format short 中看到的内容,而16f 将提供您在format long 中看到的内容。

dlmwrite('myFile.txt',bigMatrix,'delimiter','\t','precision','%.4f');
dlmwrite('myFile.txt',bigMatrix,'delimiter','\t','precision','%.16f');

控制台结果

0.0157    0.8161    0.1660    0.8044    0.7012    0.8915    0.6966    0.2325    0.9770    0.6212
0.5967    0.1195    0.3072    0.6632    0.5709    0.3407    0.5644    0.4358    0.5343    0.1799
0.3570    0.2627    0.4324    0.2399    0.8350    0.4752    0.1126    0.5609    0.8926    0.5254
0.8675    0.6808    0.5898    0.7436    0.3731    0.5500    0.9843    0.7279    0.9430    0.0010
0.0743    0.4527    0.7377    0.2043    0.2759    0.0786    0.9285    0.3956    0.4404    0.3718
0.3304    0.4124    0.4244    0.0284    0.5514    0.1419    0.5662    0.3812    0.8652    0.9084
0.0137    0.2696    0.1927    0.3641    0.2758    0.9919    0.1418    0.4953    0.2369    0.4871
0.6338    0.6510    0.0933    0.4455    0.6999    0.0452    0.9040    0.0693    0.5381    0.2402
0.3475    0.2850    0.0704    0.1310    0.4020    0.8573    0.9005    0.0485    0.1248    0.4577
0.6318    0.9094    0.8535    0.8341    0.3268    0.7237    0.3242    0.6747    0.6252    0.0885

文件结果

0.0157  0.8161  0.1660  0.8044  0.7012  0.8915  0.6966  0.2325  0.9770  0.6212
0.5967  0.1195  0.3072  0.6632  0.5709  0.3407  0.5644  0.4358  0.5343  0.1799
0.3570  0.2627  0.4324  0.2399  0.8350  0.4752  0.1126  0.5609  0.8926  0.5254
0.8675  0.6808  0.5898  0.7436  0.3731  0.5500  0.9843  0.7279  0.9430  0.0010
0.0743  0.4527  0.7377  0.2043  0.2759  0.0786  0.9285  0.3956  0.4404  0.3718
0.3304  0.4124  0.4244  0.0284  0.5514  0.1419  0.5662  0.3812  0.8652  0.9084
0.0137  0.2696  0.1927  0.3641  0.2758  0.9919  0.1418  0.4953  0.2369  0.4871
0.6338  0.6510  0.0933  0.4455  0.6999  0.0452  0.9040  0.0693  0.5381  0.2402
0.3475  0.2850  0.0704  0.1310  0.4020  0.8573  0.9005  0.0485  0.1248  0.4577
0.6318  0.9094  0.8535  0.8341  0.3268  0.7237  0.3242  0.6747  0.6252  0.0885

【讨论】:

  • 感谢您的回复,但我不确定这是否是我要找的。我不是在寻找不同的方法来保存我的数据或调整我的精度,我只是对两个输出不相同的事实感到困惑。我文件中的数据显示了预期值,但屏幕上的输出没有,我不知道为什么。一位同事建议它可能与格式有关,即命令窗口可能使用不同的符号(如 +e 或 sth.),但我不明白为什么这从未发生过,以及为什么它没有说所以。
  • 刚刚尝试了您的建议dlmwrite('myFile.txt',bigMatrix,'delimiter','\t'),我的文本文件仍然包含正确的值,但现在它对我来说是不可读的。我遇到了与此处建议的fprintf(fileOne, [repmat('%.6f\t', 1, size(bigMatrix, 2)) '\n'], bigMatrix'); 相同的问题 [stackoverflow.com/questions/15032549/print-nm-matrix-in-matlab] 这就是为什么我回到使用非常基本的 fprintf for 循环的原因。
  • 感谢您的回复,我刚刚找到了问题的答案。现在我只等两天,直到我可以接受它... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 2018-05-10
相关资源
最近更新 更多