0

不幸的是,我找不到这个问题的答案,不得不提出一个问题。如果其他地方有答案,我很抱歉,我是 IDL 的新手,不知道如何完美地表达这一点。

我的代码如下:

for i=0,delta-1 do begin
    print, flrarray[i]
    numbr_for_arr=where(del gt ((flrarray[i])-0.000001) and del lt ((flrarray[i])+0.000001))
    print,numbr_for_arr
    postnflrarray[i]=numbr_for_arr
endfor

delta 只是一个数字。finalflrarray 只是一个数组,其中包含我需要 del 的特定点(一个巨大的数组)

我的输出如下:

   ...
   24.000231 ; flrarray
   23392 ; numbr_for_arr
   24.748374
   26612
   24.213783
   27473
   24.368324
   30637
   24.711283
   32432
   24.426823
   37675
   24.039426
   40733

打印 flrarray 和 postnflrarray

   ...       24.000231       24.748374       24.213783       24.368324       24.711283       24.426823       24.039426
   ...       23392           26612           27473           30637           32432           -27861          -24803

如您所见,在打印 numbr_for_array 和附加它之间以某种方式

37675 -> -27861 和 40733 -> -24803

任何有关为什么会发生这种情况的见解将不胜感激。

我必须强调 flrarray 数组/向量来自外部源,所以我使用这种方法来查找它在我的“del”数组中的位置。

谢谢您的帮助

4

3 回答 3

1

postnflrarray 需要是“lonarr”

即 postnflrarray=lonarr(N) 其中 N 是数组的长度。这归结为数组中的值是 16 位有符号整数(最大大小约为 32767)。当您附加一个大于它的值时,它会溢出变成负数。

于 2013-11-30T20:17:17.177 回答
0

从您给出的内容来看,您似乎正在使用WHERE标量。您想WHERE与数组参数一起使用。然后,结果将给出与给定条件匹配的索引。例如,要查找大于 的正弦曲线的元素0.99,请执行以下操作:

IDL> x = findgen(360) * !dtor
IDL> y = sin(x)
IDL> ind = where(y gt 0.99, count)
IDL> print, count
          17
IDL> print, ind
          82          83          84          85          86          87          88          89
          90          91          92          93          94          95          96          97
          98
IDL> print, y[ind]
     0.990268     0.992546     0.994522     0.996195     0.997564     0.998630     0.999391
     0.999848      1.00000     0.999848     0.999391     0.998630     0.997564     0.996195
     0.994522     0.992546     0.990268
于 2013-12-02T03:13:56.053 回答
0

我对您的代码做了一个稍微改动的版本,并带有注释:

;;  If FLRARRAY is a one-dimensional array, then you could define the
;;    following outside of the for loop
;;  updn = [[flrarray - 1e-6],[flrarray + 1e-6]]
;for i=0,delta-1 do begin
for i=0L,delta-1L do begin
  print, flrarray[i]
;  numbr_for_arr=where(del gt ((flrarray[i])-0.000001) and del lt ((flrarray[i])+0.000001))
  ;;  Note:  WHERE.PRO should be returning long integers, not integers.  However, your
  ;;         output seems to suggest otherwise which is odd.
  numbr_for_arr = where(del gt (flrarray[i] - 0.000001) and del lt (flrarray[i] + 0.000001),nmb)*1L
;;  numbr_for_arr = where(del gt updn[i,0] and del lt updn[i,1],nmb)
  print,numbr_for_arr
;  postnflrarray[i]=numbr_for_arr  ;;  what if there is more than one element?
  if (nmb GT 0) then postnflrarray[i] = numbr_for_arr[0]
endfor
于 2014-09-28T16:14:57.710 回答