如果我有一个预先存在的数组,X,我想从X中提取值并将它们放入一个新数组new_x,我该怎么做?
我知道我可以使用范围函数来获取部分数组,但是我使用for循环编写的条件从X中提取数据。
答案 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)]
希望其中一种方法可以解决您的问题。