Фрагменты не имеют такого метода setSupportActionBar()
. ActionBar является свойством Activity, поэтому чтобы установить панель инструментов как actionBar, ваша активность должна быть расширена от ActionBarActivity, а затем вы можете вызвать свой фрагмент:
((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar);
UPDATE
Если вы используете AppCompatActivity :
((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
Если вам нужно наиболее эффективное с вычислительной точки зрения решение, которое я могу придумать и не ограничивающееся стандартной библиотекой, я бы порекомендовал 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 но оба они требуют другой и более подробной структуры данных, чем три массива в приведенном выше примере.
В билинейной интерполяции нет ничего особенного, что делало бы ваш вариант использования особенно странным; вам просто нужно выполнить два поиска (для единиц хранения полных строк / столбцов) или четыре поиска (для хранения типа массива). Наиболее эффективный метод зависит от ваших шаблонов доступа и структуры данных.
Если ваш пример действительно репрезентативен, с 16 полными записями, вы можете сохранить его, как хотите, и он будет достаточно быстрым для любого разумного нагрузки.
Я бы сохранил отсортированный список первого столбца и использовал бы модуль bisect
в стандартной библиотеке для поиска значений - это лучший способ получить индексы сразу ниже и сразу выше. Любой другой столбец можно сохранить как еще один список, параллельный этому.