gpt4 book ai didi

gnuplot:将数据文件 1:1 加载到数据 block 中

转载 作者:行者123 更新时间:2023-12-02 04:25:43 24 4
gpt4 key购买 nike

如何按原样(或 1:1)将数据文件读入数据 block ?我怎么能独立做这个平台呢?到目前为止我的尝试:

### load datafile "as is" into datablock for different platforms

FILE = 'Test.dat'

if (GPVAL_SYSNAME[:7] eq "Windows") { # "Windows_NT-6.1" is shown on a Win7 system
load "< echo $Data ^<^<EOD & type ".FILE
}
if (GPVAL_SYSNAME eq "Linux") { # that's shown on a Raspberry
load '< echo "\$Data << EOD" & cat '.FILE
}
if (GPVAL_SYSNAME eq "Darwin") { # this was shown on a MacOS Sierra 10.12.6
# how to load a datafile into datablock under MacOS?
}

print $Data
### end of code

在 Win10、其他 Linux 和其他 MacOS 系统上,GPVAL_SYSNAME 的值是什么?我需要多少个 if 语句来涵盖所有常见系统?至少在 Windows 下控制台窗口是闪烁的。我怎么可能抑制这个?

我将数据读入数据集的想法如下:

  1. 如果您的数据位于非常(!)缓慢的服务器路径上
  2. 如果您有相对较大的数据文件
  3. 如果您拟合并绘制来自多个文件的多条曲线

例如:

FILE1 = '\\SlowServer\blah\BigDataFile.dat'
FILE2 = '\\SlowerServer\blah\BiggerDataFile.dat'
FILE3 = '\\SlowestServer\blah\BiggestDataFile.dat'
fit f(x) FILE1 u 1:2 via a,c,d,e
fit g(x) FILE2 u 2:3 via f,g,h,i
fit h(x) FILE3 u 2:3 via j,k,l,m
plot FILE1 u 1:2:3 w l, \
'' u (function($1)):(function($2)):3 with <whatever>, \
FILE2 u 4:5:6 w l, \
'' u 1:2:3 w l, \
FILE3 u 7:8:9 w l, \
'' u 1:2:3 w l , \
<and more...>

我的问题:

  1. 每次绘制或拟合 FILE'' 时,FILE 的内容将被一次又一次地加载还是将其保留在内存?
  2. 如果您放大,例如在交互式 wxt 终端中,在我看来好像需要再次加载文件。这是真的吗?
  3. 如果文件一次又一次地加载,最好的做法是在开始时将文件一次加载到数据 block 中,然后再使用这些数据 block 吗?

欢迎任何解释、限制、优缺点和评论。

添加:

(部分答案,但有新问题):对于 Windows、Linux 和 MacOS 系统,以下似乎工作正常。 Linux 和 MacOS 显然是相同的。

if (GPVAL_SYSNAME[:7] eq "Windows") { load '< echo $Data ^<^<EOD & type "Test.dat"' }
if (GPVAL_SYSNAME eq "Linux" ) { load '< echo "\$Data << EOD" & cat "Test.dat"' }
if (GPVAL_SYSNAME eq "Darwin") { load '< echo "\$Data << EOD" & cat "Test.dat"' }

但是,如果我想从外部 gnuplot 过程 "FileToDatablock.gpp" 调用此构造,它会在 Win7/64 下重现地使 gnuplot 崩溃(还没有机会测试 Linux 或 MacOS) .

“FileToDatablock.gpp”

### Load datafile "as is" 1:1 into datablock for different platforms
# ARG1 = input filename
# ARG2 = output datablock
# usage example: call "FileToDatablock.gpp" "Test.dat" "$Data"

if (ARGC<1) { ARG1 = "Test.dat" }
if (ARGC<2) { ARG2 = "$Data" }
if (GPVAL_SYSNAME[:7] eq "Windows") { load '< echo '.ARG2.' ^<^<EOD & type "'.ARG1.'"' }
if (GPVAL_SYSNAME eq "Linux" ) { load '< echo "\'.ARG2.' << EOD" & cat "'.ARG1.'"' }
if (GPVAL_SYSNAME eq "Darwin") { load '< echo "\'.ARG2.' << EOD" & cat "'.ARG1.'"' }
### end of code

调用这个过程的文件:

### load datafile 1:1 into datablock
reset session

# this works fine under Win7/64
FILE = "Test.dat"
DATA = "$Data"
load '< echo '.DATA.' ^<^<EOD & type "'.FILE.'"'
print $Data

# this crashes gnuplot under Win7/64
call "tbFileToDatablock.gpp" "Test.dat" "$Data"
print $Data
### end of code

这是怎么回事?谁能解释为什么以及如何解决这个问题?

最佳答案

只要您知道输入数据格式,就可以将文件读入数据 block 。例如,您有一个包含 3 列数字的文件 MyFile1,您希望将其读入数据 block MyBlock1,然后以 3 种方式绘制:

set table $MyBlock1
plot "MyFile1" using 1:2:3 with table
unset table
plot $MyBlock1 using 1:2 with points
plot $MyBlock1 using 2:3 with points
plot $MyBlock1 using 1:3 with lines

这避免了多次读取文件,并且应该可以在任何平台上工作。与其这样做,我认为将文件从慢速文件系统复制到本地文件系统会更简单。

关于gnuplot:将数据文件 1:1 加载到数据 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com