创建空数组以将新值放入IDL

时间:2016-07-12 19:00:15

标签: loops idl-programming-language

如果我有一个预先存在的数组,X,我想从X中提取值并将它们放入一个新数组new_x,我该怎么做?

我知道我可以使用范围函数来获取部分数组,但是我使用for循环编写的条件从X中提取数据。

1 个答案:

答案 0 :(得分:2)

有许多不同的方法,具体取决于数组的大小。最简单的方法是将值连接到新数组中。例如:

new_x = []
for i=0,n_elements(x)-1 do begin
  if x[i] "matches condition" then new_x = [new_x, x[i]]
endfor

这适用于小型数组,但对于大型数组而言变得非常昂贵且速度慢,因为您总是重新分配内存。

更好的方法是使用“flag”数组,然后使用“WHERE”来提取索引。例如:

flag = BYTARR(N_ELEMENTS(x))
for i=0,n_elements(x)-1 do begin
  if x[i] "matches condition" then flag[i] = 1
endfor
new_x = x[WHERE(flag, /NULL)]

最好的方法是完全消除for循环,但这可能是不可能的。例如,假设您只想要在特定数据范围内的X值:

new_x = x[WHERE(x ge 5 and x le 10, /NULL)]

希望其中一种方法可以解决您的问题。