Какой метод многомерной интерполяции является лучшим для практического применения?

Объекты в JavaScript не сохраняют порядок встречи, для сохранения порядка вставки ключей используйте новый объект Map :

function wordCount(str) {
  tempStr = str.toUpperCase();
  arr1 = tempStr.split(" "); 
  let frequencyConter1 = new Map();
  for (let val of arr1 ){ 
     frequencyConter1.set(val, ((frequencyConter1.get(val) || 0) + 1) );
  } 
  for( let [key, value] of frequencyConter1){
    console.log(`${key} ${value}`);
  }
} 
wordCount("My name is Xyz 1991 He is Abc Is he allright")

Примечание : Как упомянуто @Kaiido, из ES2015 для приходов в некоторых случаях на ключи наложен порядок. объект. Порядок является целочисленным, как ключи в возрастающем порядке, обычные ключи в порядке вставки и символы в порядке вставки, но он не распространяется на все методы итерации.

11
задан akalenuk 26 September 2011 в 22:31
поделиться

5 ответов

Я использовал Кригинг в прошлом с разрозненными данными, которые шли с оценками точности при каждом образце. Походивший мощная техника, которая имела право более широко использоваться вне мира геостатистики.

6
ответ дан 3 December 2019 в 03:05
поделиться

единственное приложение, которое я видел, является тем в коде littleCMS (механизм управления цветом с открытым исходным кодом).

в первый раз, когда я проверил его, это просто сделало линейную интерполяцию в одной оси и затем интерполировало между тем результатом и точкой в другой оси. я только что повторно загрузил его, и, кажется, намного более сложен. не может выдержать сравнение со статьей, которую Вы упоминаете, но могли бы хотеть проверить его, это находится в cmslut.c файл.

2
ответ дан 3 December 2019 в 03:05
поделиться

Я работал со сглаживанием 3D разрозненных данных для поверхностной ССЫЛКИ управления. Это включило много точек, и я хотел очень гладкую поверхность, таким образом, процесс сначала нашел хорошо-пригодную поверхность второго порядка к данным и затем релаксационной фазе, где точки были приспособлены на поверхность. Это не поверхность интерполяции к исходным данным, но, это был способ уменьшить порядок interpolant оптимизированным способом.

Метод включил работу на кусочных регионах, которые хорошо подходили для приближения второго порядка.

Другая интересная характеристика метода - то, что точки были verticies треугольников, и возможность соединения сохраняется во время сглаживания.

1
ответ дан 3 December 2019 в 03:05
поделиться

(Это будет продолжаться долго, если я просто не выдохну.)

Сначала несколько комментариев о нерассеянные данные. (См. Ответ, который ссылается на littleCMS).

Существует два типа цветовой интерполяции, которые являются общими. Несколько лет назад трилинейная интерполяция (линейная интерполяция тензорного произведения) была распространенным подходом для интерполяции таблицы цветов. Трилинейная интерполяция действительно может быть реализована как последовательный набор одномерных интерполяций, сначала по одной оси, затем по второй оси и т. Д.

Много лет назад мы все поняли, что трилинейная интерполяция привносит артефакты в отображение цвета при применении к определенные виды преобразований. Проблемы видны в нейтралах. Решение состоит в том, чтобы перейти к симплициальному интерполанту, в 3-м, разделив куб на 6 тетраэдров. В п размерах, единичный куб будет разбит на факторные (n) симплексы. Существуют и другие разрезы куба, но этот конкретный стиль гарантирует, что главная диагональ всегда является общим ребром для всех симплексов. Это, в свою очередь, восстанавливает хорошее поведение для нейтральных значений при применении к определенным таблицам поиска цветов.

Теперь позвольте мне перейти к вопросу об истинной интерполяции разбросанных данных.

Другие упоминали множество схем. Кригинг, мультиквадрики, дистанционные методы - это несколько. (Когда я в прошлом работал с этими схемами, я фактически предпочитал обратные многоквадратичные методы.) Все это на самом деле просто вариации методов радиальных базисных функций, общая схема. Методы RBF имеют свои плюсы и минусы. Они обычно генерируют гладкий интерполант, это, конечно, зависит от конкретной выбранной базисной функции, а также ли вы решили ограничить поддержку. Методы RBF также позволяют экстраполировать, по крайней мере, настолько, насколько будет расширяться поддержка радиальных базовых элементов. Если базовым элементам разрешено быть бесконечными по степени, то никакое явное ограничение на экстраполяцию не будет применяться. (Экстраполяция вообще плохая вещь.) Одна проблема с методами RBF состоит в том, что они требуют решения больших систем линейных уравнений, и эти системы уравнений часто являются плотными матрицами. Это означает, что размер проблемы, с точки зрения количества точек данных, которые вы можете обработать, обычно ограничивается линейной алгеброй. Если вместо этого вы ограничите поддержку путем усечения базовых элементов, то матрицы могут стать разреженными. Это улучшит линейную алгебру, если вы используете разреженный матричный пакет для решения. В то же время, расстояние поддержки становится нелинейным параметром, который вы должны контролировать. Кроме того, такие методы, как многоквадратичные и обратные многоквадратичные методы, могут иметь вторичный нелинейный параметр, который управляет формой базовых элементов. У Кригинга есть похожие проблемы, и я бы объединил все эти методы вместе.

Для решения этих проблем все эти методы, которые я классифицировал как варианты RBF, часто ограничены в количестве точек, которые они будут удобно обрабатывать. В зависимости от того, как вы справляетесь с вещами и объемом доступной памяти, этот предел часто может составлять порядка нескольких тысяч точек.

Еще одна проблема с общим классом методов RBF - это то, что я назову интраполяцией. Это неологизм, который я создал много лет назад, чтобы описать интерполяцию через относительно большую дыру в данных. По факту, часто могут возникнуть проблемы даже при интерполяции через более мелкие дыры в данных. Эти методы, поскольку они в некоторой степени гладкие, могут вводить нежелательные экстремумы (большие пики или впадины) в интерполированную поверхность. Это общая проблема даже с 1-мерными интерполантами, часто рассматриваемая как кольцевые артефакты с кубическим сплайном или полиномиальными интерполантами, и, безусловно, наблюдаемая с интерполантами рядов Фурье. Проблема в более высоких измерениях состоит в том, чтобы даже признать, что это действительно произошло, так как построение поверхностей в более чем трех измерениях имеет тенденцию быть трудным.

Если у вас больше точек, чем этот предел, или если эти звенящие артефакты неприемлемы, тогда другие методы часто лучший выбор. Если вы хотите использовать линейный интерполятор, то самое простое решение в более высоких измерениях - начать с тесселяции данных. Таким образом, в 3-х измерениях тесселяция данных (обычно тесселяция Делоне) в тетраэдры. Это довольно эффективно, и для этой цели можно найти множество инструментов. Тогда простая задача - интерполировать любую отдельную точку. Просто определите, в каком симплексе находится точка, вычислите барицентрические координаты как веса интерполяции в симплексе и сформируйте соответствующую линейную комбинацию значений функции в каждой вершине найденного симплекса. Все это очень быстро и эффективно.

Недостатком этих методов, основанных на тесселяции, является то, что они обычно ограничивают вас выпуклой оболочкой точек данных, и, как плохо, если ваши данные оказываются в невыпуклой области, то Интерполант может делать странные вещи в некоторых регионах вашего домена. Еще одна проблема со схемой, которую я упомянул выше, Интерполант будет только кусочно-линейным, но как только вы перейдете в более высокие измерения, все станет очень быстро. Другие методы должны быть найдены для гладкой интерполяции, основанной на тесселяции, но они потребуют больше усилий и, следовательно, гораздо реже.

Основные компромиссы здесь должны быть очевидны. Если вам нужен гладкий интерполант и только несколько точек, то часто выбираются методы RBF. Они просты, просты в использовании и т. Д. Выбранный метод часто является просто вопросом удобства или даже привычкой. Если бы я использовал один инструмент раньше и был счастлив, я, вероятно, буду счастлив с ним снова. Поскольку вопрос заключался в том, какой метод является «наилучшим для практического использования», я укажу, что «лучший» - это очень субъективное слово при применении вне контекста. Каковы ваши цели в проблеме интерполяции? Какой набор навыков у вас есть? Какой набор инструментов вы знаете, как использовать? В какой среде вы будете работать? Все эти факторы будут влиять на ваш выбор лучшего метода.

Если у вас много точек данных, и скорость важна, но конечная гладкость не так важна, тогда вы обычно будете искать симплициальный интерполант. Конечно, если у вас достаточно очков, то кусочно-линейный характер зверя имеет меньшее значение. Кусочно-линейный интерполант здесь имеет большое преимущество в некоторых случаях, что он никогда не может генерировать экстремумы на вашей поверхности, которых не было в данных. Для некоторых проблем, например, для характеристики цвета, это имеет первостепенное значение.

Еще одна проблема связана с шумом. Хотя наличие шума часто является сигналом о необходимости какого-либо сглаживания, сглаживание применяется не ко всем таким поверхностям. Любой оператор сглаживания также иногда сглаживает важные особенности данных. Это происходит потому, что мы можем думать о сглаживающем операторе как о фильтре нижних частот. Поведение на высокой частоте часто является шумом, но это также может быть просто острый палец ноги или плеча на моей поверхности, который я не могу позволить себе потерять. Если это проблема, то вы можете захотеть использовать интерполант даже при наличии иногда значительного шума. В этом случае я предполагаю, что самый простой интерполятор низшего порядка является лучшим. Гладкий, более глобальный интерполант также будет иметь тенденцию усиливать любой шум в данных, поэтому, если вы ищете интерполант с наименьшей дисперсией при наличии шума, он обычно будет линейным интерполантом.

Конечно, Есть много разновидностей тонких пластин сплайнов, интерполяционных или нет. Как только вы выходите за пределы одного измерения, ваши возможности также расширяются, по крайней мере, если вы готовы выполнять эту работу.

Я закончу здесь, прежде чем она превратится в книгу.

16
ответ дан 3 December 2019 в 03:05
поделиться

(год спустя) см. inverse-distance-weighted-idw-interpolation-with-python, комбинация взвешивания с обратным расстоянием и scipy.spatial.KDTree.

4
ответ дан 3 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: