不幸的是,我找不到这个问题的答案,不得不提出问题。如果在其他地方有答案,我道歉,我是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'数组中的位置。
感谢您的帮助
答案 0 :(得分:1)
postnflrarray需要成为'lonarr'
即postnflrarray = lonarr(N) 其中N是数组的长度。这归结为数组中的值为16位有符号整数(最大大小约为32767)。当你附加一个大于它的值时,它会溢出变为负数。
答案 1 :(得分: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
答案 2 :(得分: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