很高兴在 StackOverflow 上看到另一位 IDL 程序员!
我认为部分问题在于READCOL
期望简单的变量名称
它的输出,在你的第二个例子中,你给它数组表达式,比如a(i)
and b(i)
代替a
and b
.
如果我正确理解你的问题,你想替换一维数组a0
, a1
, b0
, b1
等等,来自您的第一个示例,带有二维数组a
, b
,
等等,其中每个数组都有维度(nfiles、samples_per_file)。所以如果你知道
提前从每个文件中读取多少行,你可以这样做:
a=dblarr(n,samples_per_file)
b=dblarr(n,samples_per_file)
; similarly for c, d, etc.
for i = 0, n-1 do begin
readcol, string(i, F='(I02)')+'.dat',F='D,D', x, y
a[i,*] = x
b[i,*] = y
c[i,*] = x/x[0]
d[i,*] = y/y[0]
endfor
这个版本通过了READCOL
它期望的简单变量名称,然后复制它们
到二维变量的子数组中。
如果您事先不知道每个文件中有多少个样本,您可以分配
第一次循环迭代期间的二维数组:
for i = 0, n-1 do begin
readcol, string(i, F='(I02)')+'.dat',F='D,D', x, y
if (i EQ 0) then begin
samples_per_file = n_elements(x)
a = dblarr(n, samples_per_file)
b = dblarr(n, samples_per_file)
c = dblarr(n, samples_per_file)
d = dblarr(n, samples_per_file)
endif
a[i,*] = x
b[i,*] = y
c[i,*] = x/x[0]
d[i,*] = y/y[0]
endfor
当然,这一切都假设每个文件包含相同数量的样本。如果不,
你可能需要改变a
, b
, c
, and d
到一维指针数组,
然后使用PTR_NEW
在读取每个文件的数据时为其分配内存。
(请注意,我使用了方括号[]
数组索引的符号,我发现
比阅读更容易一点a(i)
, b(i)
等等,这可能与函数调用混淆。)