Я пишу функцию, которая выполняет итерацию по списку чисел в GEE, и я хотел бы подсчитать, на какой итерации функция находится в данный момент, поскольку она мне нужна для выполнения других вычислений. Однако я не нашел способ сделать это. Попытка классического подхода (т. е. j=j+1) возвращает ложный результат. Пример кода ниже:

var j = ee.Number(0);

var test = ee.List([10,42,5,1,78,6]).iterate(function(i,list){
  j = ee.Number(j.add(1))
  var accum = ee.Number(i).add(ee.List(list).get(-1))
  return ee.List(list).add(accum)
},ee.List([0]));

print(test);
print(j);

Код печатает последнее j как 3, когда в списке явно 6 элементов.

1
Madeleine Nicolas 8 Янв 2022 в 01:12

2 ответа

Вы не можете изменять глобальные переменные в итерируемой или отображаемой функции.

Более простой способ - перебирать индексы, а не список.

list = ee.List([10,42,5,1,78,6])
test = ee.List.sequence(0, list.size()).iterate(function(index, result) {
    ...
})

Тем не менее, обычно лучше избегать iterate(), если это возможно, так как он плохо масштабируется.

0
Noel Gorelick 8 Янв 2022 в 17:42

Разобрался, это немного запутанно, но я думаю, что другого пути нет, способ получения текущей итерации (в данном случае) ee.List([10,42,5,1,78,6]).indexOf(i)

0
Madeleine Nicolas 8 Янв 2022 в 02:22