微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Octave 中创建带有标题和不同变量的文件?

如何解决如何在 Octave 中创建带有标题和不同变量的文件?

我需要创建一个包含一些变量及其相应标题文件。为此,我创建了一个数组,其中的变量使它们的大小相同。为了保存或创建此文件,我尝试了很多方法,但它们无法正常工作。我先尝试了 save blbl.txt V1 V2,但我没有找到放置标题方法。因此,我在 Matlab 论坛中找到了 fprintf(我在 Octave 论坛中没有找到这样的示例),但它的作用与所示示例不同。

V1 = [1 2 3];
V2 = [4 5 6];
V = [V1.',V2.'];
fileID=fopen('Pin.txt','w');
fprintf(fileID,'%12s %13s\n','V1','V2');
fprintf(fileID,'%6.6f %13.6f\n',V);
fclose(fileID);

它打印标题和两列,但它首先打印 V1 的值,然后是 V2 中的值。我的意思是:

V1 V2
1   2
3   4 
5   6

它应该是(这应该是在 Matlab 中发生的)

V1 V2
1   4
2   5
3   6

有人明白为什么会这样吗?或者如果在 Octave 中有更好的方法来做到这一点?

解决方法

在 Matlab/Octave 中,fprintf 通常采用 column-major order 中的值。所以你需要转置V

fprintf(fileID,'%6.6f %13.6f\n',V.');

fprintf(fileID,[V1; V2]);
,

想要做什么?在我看来,您只是想创建一个 csv 文件(好吧,用空格而不是逗号)。

如果是这样,您可以使用与 csv 相关的函数。例如

pkg load io
C = vertcat( { 'V1','V2' },num2cell( V ) );
cell2csv ( 'Pin.txt',C,' ' );

无论如何,正如 Luis 所暗示的那样,以这种方式输出的原因如下(取自 Matlab 文档)

如果您的函数调用提供的输入参数多于格式说明符中的格式运算符,则这些运算符将被重用。

由于matlab和octave column-major-order(即下一个元素是'下面'的那个,而不是'右边'的那个),如果你想以这种方式'重用'变量,你需要安排就像路易斯建议的那样。

如果 matlab 产生了“正确”的结果,那么这实际上是一个 matlab 错误,因为在这种情况下它应该与八度音程相同,您不应该依赖它 .

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。