LINUX.ORG.RU

обработка большого массива


0

1

например имеется одномерный, или двумерный массив точек, для каждой точки заданы координаты и набор величин, причём количество точек может быть достаточно большим. нужно интерполировать значения точек в узлы сетки с заданным шагом. обходить весь массив для каждого узла сетки затратно — какие есть уловки?

★★★★★

Последнее исправление: thunar (всего исправлений: 2)

А что значит двумерный массив, для каждой точки которого заданы координаты (в точке видимо лежат)? Какой смысл в его двумерности?

Уловка единственная - нужно обеспечить локальность данных. Как по порядку соотносятся шаги исходной сетки и шаги целевой сетки?

AIv ★★★★★
()

> обходить весь массив для каждого узла сетки затратно
Имеется ввиду процессорное время?

какие есть уловки?

Запустить пару потоков.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

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

AIv ★★★★★
()

А как вы себе представляете сглаживание интерполирующего полинома без знания всех точек? Можно, конечно, попробовать сделать двойную пересекающуюся сетку, на которой отдельно строить интерполирующие полиномы или сплайны, а нужное значение получать из квадрата, центр которого лежит ближе всего к интересующей точке.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от AIv

массив вида: [[x0,y0,vx0,vr0,vo0], [x1,y1,vx1,vr1,vo1], ... [xN,yN,vxN,vrN,voN]]

x,y — координаты. N=, например, 100000

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

там нет «исходной сетки», координаты заданы во float и точки могут быть расположены относительно сетки как угодно.

thunar ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

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

AIv ★★★★★
()
Ответ на: комментарий от thunar

Так бы сразу и сказали.... идете в цикле по частицам, для каждой частицы раскидываете соотв. веса на сетку. Если частицы расположены кучно (те частицы лежащие рядом в физ пр-ве лежат рядом в памяти) то работать будет быстро. Сколько частиц и сколько узлов сетки?

AIv ★★★★★
()
Ответ на: комментарий от thunar

А, так у вас проблема быстрого нахождения точек с координатами, лежащими внутри круга заданного радиуса?

Ну, можно, например, предварительно разбить точки на квадратные зоны фиксированного размера - искать нужно будет меньше.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от AIv

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

AIv ★★★★★
()
Ответ на: комментарий от AIv

т.е. заводить не большой массив со всеми частицами, а несколько маленьких, ближайших к узлам?

Треугольник не оч хороший форм-фактор

поясните.

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

> узлов сетки 100*100, частиц ~10^5\div10^6

Тогда вообще фигня, не о чем беспокоится, можно даже частицы не упорядочивать.

AIv ★★★★★
()
Ответ на: комментарий от thunar

> т.е. заводить не большой массив со всеми частицами, а несколько маленьких, ближайших к узлам?

В каждом узле свой маленький массив, но для сетки 100х100 это не нужно и даже скорее вредно.

Треугольник не оч хороший форм-фактор

поясните.

Гляньте книжку Сигова, там это есть. У треугольника есть скачки производной и что приводит к некоторым некузявостям, лучше юзать более гладкие варианты. Хотя вон Вадим в посл коде пока с треугольником работает...

AIv ★★★★★
()

>какие есть уловки?

Use Haskell, Luke.

anonymous
()
Ответ на: комментарий от thunar

> хочется сразу сделать нормально, что бы потом не было нужды переписывать.

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

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.