将新变量附加到IDL for loop数组

时间:2016-07-12 17:01:59

标签: arrays idl-programming-language

如果我有以下数组:

x = double([1, 1, 1, 10, 1, 1, 50, 1, 1, 1 ])

我想做以下事情:

  1. 将数组分组为5个组,每个组将分别进行评估。

  2. 识别数组

  3. 中每个组的MAX值
  4. 删除该MAX值并将其放入另一个数组中。

  5. 最后,我想打印没有MAX值的更新数组x,以及包含MAX值的新数组。

  6. 我该怎么做?我是IDL的新手,没有正式的编码培训。

    我知道我可以编写代码进行分组并以这种方式找到最大值:

    FOR i = 1, (n_elements(x)-4) do begin
      print, "MAX of array", MAX( MAX(x[i-1:1+3])
    ENDFOR
    

    但是,我如何实现上面指定的所有内容?我知道我必须创建一个空数组,它将追加for循环找到的值,但我不知道该怎么做。

    由于

2 个答案:

答案 0 :(得分:1)

我改变了你的x以拥有独特的元素,以确保我不会愚弄自己。这样,x的元素数量必须可以被group_size整除:

x = double([1, 2, 3, 10, 4, 5, 50, 6, 7, 8])
group_size = 5
maxes = max(reform(x, group_size, n_elements(x) / group_size), ind, dimension=1)
all = bytarr(n_elements(x))
all[ind] = 1
x_without_maxes = x[where(all eq 0)]
print, maxes
print, x_without_maxes

答案 1 :(得分:0)

List对此有好处,因为它们允许您在特定索引处弹出值,而不是再次重写整个数组。您可以尝试以下内容。我在这里使用了while循环,而不是for循环,因为在这种情况下它会更容易。

x = List(1, 1, 1, 10, 1, 1, 50, 1, 1, 1)

maxValues = List()

pos = 4
while (pos le x.length) do begin
    maxValues.add, max(x[pos-4:pos].toArray(), iMax)
    x.Remove, iMax+pos-4
    pos += 5-1
endwhile

print, "Max Values : ", maxValues.toArray()
print, "Remaining Values : ", x.toArray()

这可以让你做我想你想做的事。最后,您有一个List对象(可以很容易地转换为数组),每个组的最大值为5,另一个包含剩余值。

另外,请将其标记为idl-programming-language而不是idl。它们是两个不同的标签。