2014-11-07 5 views
2

У меня есть 3 массива numpy: X и Y - долготы и широты, а Z - цифровые значения высоты. Все X, Y и Z покрывают КРАСНЫЙ многоугольник.Ускорьте SciPy Griddata Function

Однако, когда я делаю сетку данных следующим образом, она покрывает синий полигон.

x = X.ravel() 
y = Y.ravel() 
z = Z.ravel() 

xi = np.linspace(np.min(x), np.max(x), 5000) #As you see the size of data are so large (5000 by 5000) 
yi = np.linspace(np.max(y), np.min(y), 5000) 

zi = griddata((x, y), z, (xi.reshape(1,-1), yi.reshape(-1,1)), method='nearest') #from 
scipy.interpolate import griddata 

Как это сделать, чтобы покрыть только КРАСНЫЙ многоугольник?

enter image description here

Вычисление также очень медленно, если я сделать это можно вычислить только в пределах КРАСНОЙ полигона было бы быстрее и.

+0

Simen, вы можете вставить изображение прямо в свой вопрос, посмотреть небольшую панель инструментов над окном ввода SO. Ciao от – gboffi

+0

Спасибо. Я отредактировал мой вопрос. – Borys

+0

Насколько мне известно, griddata пытается вычислить значение для каждой ячейки в вашей матрице (либо ближайшее значение, либо через интерполяцию). Таким образом, ваша цель не может быть достигнута с помощью этой функции, потому что в результате нет «отсутствующих данных» (область между синим и красным). Это верно? Кроме того, пропущенные значения внутри красного квадритера заполняются. – HyperCube

ответ

0
  1. Медленность, вы интерполируете свои данные на сетке 5000x5000. ОК. на каком устройстве вы собираетесь представлять свои интерполированные данные? Это сутенер? Возможно, нет ...

.

  1. Форма ... это выстрел в темноте, но возможно ли, что где-то в вашем коде вы забыли проецировать сферические координаты по плоскости? (aka mapping) --- еще одна возможность заключается в том, что ваши данные указаны в общем четырехстороннем, но тогда вы нарисуете z в терминах матрицы zi, определенной на прямоугольной сетке. Две возможности несовместимы.
+0

2. Я использую 64-разрядную операционную систему Windows 7, оперативную память 16 ГБ и процессор i7. Таким образом, машина неплохая, но сетка занимает около 5 минут, это слишком долго, потому что мне нужно собрать сотни таких изображений. – Borys

+0

1. X и Y находятся в географической системе координат, и мой вывод тоже одинаков. – Borys

+0

Не компьютер! Экран или принтер важны. Скажем, это экран 1600x900, и у вас есть часть его для вашей тепловой карты, скажем, 1000x800 пикселей. Matplotlib должен *** downsample *** вашу матрицу 'zi', значение 5000x5000, чтобы иметь возможность представлять ваш' zi' на вашем устройстве! OTOH, если вы используете матрицу «zi» размером 300 × 300 (фактические размеры зависят от максимальных пространственных частот функций, которые вы хотите представить). Matplotlib может интерполировать цвета в «отсутствующих пикселях».Используя 5000x5000, вы выполняете работу, которую matplotlib выкинет, НЕ ДЕЛАЙТЕ ЭТО (если вы не сможете это продемонстрировать) – gboffi