如何在Octave中创建具有标头和不同变量的文件



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

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

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

V1 V2
1   2
3   4 
5   6

应该是

V1 V2
1   4
2   5
3   6

有人明白为什么会发生这种事吗?或者在Octave中是否有更好的方法?

在Matlab/Octave中,fprintf按列主顺序取值。所以你需要转换V:

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

fprintf(fileID, '%6.6f %13.6fn', [V1; V2]);

正在尝试做什么?在我看来,你只是想创建一个csv文件(用空格代替逗号(。

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

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

在任何情况下,正如Luis也暗示的那样,输出以这种方式出现的原因是以下(取自Matlab文档(

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

由于matlab和倍频程列的主要顺序(即下一个元素是"下面"的元素,而不是"右边"的元素(,如果你想以这种方式"重用"变量,你需要按照Luis的建议来安排。

如果matlab产生了"正确"的结果,那么这实际上是一个matlab错误,因为在这种情况下,它应该与倍频程相同,你不应该依赖它

相关内容

  • 没有找到相关文章

最新更新