2

我正在开发一段 k-means 模糊代码。现在我想保存由 . 显示的每次迭代的数据statset('Display','iter');。请帮帮我。

X = [randn(20,2)+ones(20,2); randn(20,2)-ones(20,2)];
opts = statset('Display','iter');

[cidx, ctrs] = kmeans(X, 2, 'Distance','city', ...
    'Replicates',5, 'Options',opts);

plot(X(cidx==1,1),X(cidx==1,2),'r.', ...
X(cidx==2,1),X(cidx==2,2),'b.', ctrs(:,1),ctrs(:,2),'kx');
4

2 回答 2

4

该函数提供了一个虚拟解决方案,该函数 diary可以将 matlab 控制台输出存储在文件中。

X = [randn(20,2)+ones(20,2); randn(20,2)-ones(20,2)];
opts = statset('Display','iter');

diary('output.txt')  % # Whatever is displayed from now on is saved on 'output.txt'

[cidx, ctrs] = kmeans(X, 2, 'Distance','city', ...
    'Replicates',5, 'Options',opts);

diary('off')         % # logging is disabled

执行后,output.txt将包含

 iter    phase       num             sum
  1      1        40          96.442
  2      1         8         79.7403
  3      1         6         70.2776
 ...

您可能希望output.txt在每次运行时清除内容,否则它只会在前一个日志之后附加新日志。

于 2013-04-04T17:55:47.920 回答
0

一种实现方法是将 MATLAB 终端中显示的输出重定向到一个文件,例如'my_file.txt'. 为此:

  1. 使用命令edit statset.m;在 MATLAB 编辑器中打开文件。
  2. 使用 .打开您需要的输出文件fid = fopen('my_file.txt','w');
  3. 替换fprintf(fprintf(fid,

statset.m为了安全起见,您可能还想保留一份备份副本。

编辑

@Acorbe 的解决方案在没有上述所有麻烦的情况下给出了相同的结果。

于 2013-04-04T18:04:04.220 回答