Хранение данных для упрощения интерполяции данных в Python

Фрагменты не имеют такого метода setSupportActionBar(). ActionBar является свойством Activity, поэтому чтобы установить панель инструментов как actionBar, ваша активность должна быть расширена от ActionBarActivity, а затем вы можете вызвать свой фрагмент:

 ((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar);

UPDATE

Если вы используете AppCompatActivity :

 ((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);

6
задан Peter Mortensen 12 December 2010 в 13:52
поделиться

3 ответа

Если вам нужно наиболее эффективное с вычислительной точки зрения решение, которое я могу придумать и не ограничивающееся стандартной библиотекой, я бы порекомендовал scipy / numpy. Сначала сохраните массив a..p как массив 2D numpy, а затем массивы $ 4k-10k и 1-4 как массивы 1D numpy. Используйте scipy interpolate.interp1d, если оба 1D-массива монотонно увеличиваются, или interpolate.bsplrep (двумерное представление сплайна), если нет, а массивы ваших примеров такие же маленькие, как ваш пример. Или просто напишите свой и не заморачивайтесь с scipy. Вот несколько примеров:

# this follows your pseudocode most closely, but it is *not*
# the most efficient since it creates the interpolation 
# functions on each call to bilinterp
from scipy import interpolate
import numpy
data = numpy.arange(0., 16.).reshape((4,4))  #2D array
prices = numpy.arange(10000., 50000., 10000.)
cars = numpy.arange(1., 5.)
def bilinterp(price,car):
    return interpolate.interp1d(cars, interpolate.interp1d(prices, a)(price))(car)
print bilinterp(22000,2)

В последний раз, когда я проверял (версия scipy из 2007 года), он работал только для монотонно увеличивающихся массивов x и y)

для небольших массивов, таких как этот массив 4x4, я думаю, вы хотите использовать это: http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.bisplrep.html#scipy.interpolate.bisplrep который будет обрабатывать поверхности более интересной формы, и функцию нужно создать только один раз. Для больших массивов, я думаю, вам это нужно (не уверен, что у него те же ограничения, что и у interp1d): http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d но оба они требуют другой и более подробной структуры данных, чем три массива в приведенном выше примере.

7
ответ дан 10 December 2019 в 00:44
поделиться

В билинейной интерполяции нет ничего особенного, что делало бы ваш вариант использования особенно странным; вам просто нужно выполнить два поиска (для единиц хранения полных строк / столбцов) или четыре поиска (для хранения типа массива). Наиболее эффективный метод зависит от ваших шаблонов доступа и структуры данных.

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

0
ответ дан 10 December 2019 в 00:44
поделиться

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

3
ответ дан 10 December 2019 в 00:44
поделиться
Другие вопросы по тегам:

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