【问题标题】:Read values from multiple files in IDL从 IDL 中的多个文件中读取值
【发布时间】:2016-03-01 21:29:39
【问题描述】:

我有几个文件试图从中提取亮度温度变量,BT。我想将所有变量放入一个数组中。这就是我所拥有的,到目前为止。我已经打开了所有文件,但我不知道如何组合所有值。

filelist = FINDFILE(in_path+"ATMS-v11r1_npp_s"+date_str+"*nc",count=nfiles)

FOR i = 0, nfiles -1 DO BEGIN

PE1_fid=NCDF_OPEN(filelist(i))
field = 'BT'
NCDF_VARGET, pe1_fid, field, pe1_data

ENDFOR

【问题讨论】:

    标签: idl-programming-language


    【解决方案1】:

    你没有说变量 BT 的大小/类型是什么。我假设它是一个浮点标量,但如果不是,您将修改下面的 bt 的定义以匹配。

    filelist = file_search(in_path + 'ATMS-v11r1_npp_s' + date_str + '*nc', $
                          count=nfiles)
    bt = fltarr(nfiles)
    
    for i = 0, nfiles - 1 do begin
      pe1_fid = ncdf_open(filelist[i])
      field = 'BT'
      ncdf_varget, pe1_fid, field, e1_data
      bt[i] = e1_data
    endear
    

    我还更改了您的代码的其他一些内容:

    • FINDFILE 已过时,请使用 FILE_SEARCH
    • 不要使用括号索引数组,使用方括号(和compile_opt strictarr)。
    • 对字符串文字使用单引号而不是双引号。

    【讨论】:

      【解决方案2】:

      使用 IDL 8 或更高版本,您可以稍微简化代码,与每个 e1_data 字段包含多少条目无关:

      filelist = FILE_SEARCH(in_path + 'ATMS-v11r1_npp_s' + date_str + '*nc', count=nfiles)
      
      bt = []
      FOR i = 0,nfiles-1 DO BEGIN
        pe1_fid = = ncdf_open(filelist[i])
        field = 'BT'
        ncdf_varget, pe1_fid, field, e1_data
        bt = [bt, e1_data]
      ENDFOR
      

      【讨论】:

      • 我收到一条错误消息,指出数组无法连接,因为尺寸不一致...这是因为 bt 是无量纲的吗?
      • 只要e1_data 是标量或真正的一维数组(而不是维度为 [1,n] 或类似的伪一维),我的代码就应该可以工作。在这些情况下,您需要 reform 之前的数据。如果是不同的格式,您需要区别对待。
      • 我的数组是二维的。可以用reform转换成一维数组吗?
      • 是的...在某些条件下。查看 IDL 在 reform 上的帮助
      • 这似乎奏效了。我所做的是:reform(e1_data, n_elements(e1_data), 1)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多