Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2016 07:58:03

Oleg256
Зарегистрирован: 2013-08-10
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Решить задачу средствами NumPy

Помогите пожалуйста решить задачу средствами NumPy. Насколько я понял это позволяет значительно ускорить действие. А в этой задаче скорость важна. Стандартными средствами при помощи списков и циклов я решил, но вот в NumPy пока полный чайник, читаю документацию, но никак не могу сообразить как код написать и даже индекс числа из одномерного массива не могу вывести.
Сама задача.
Есть двумерный массив. В массиве несколько тысяч последовательностей из 12 чисел. Некая база данных. Первое число – просто порядковый номер последовательности, остальные 11 чисел собственно последовательность. Как это выглядит (здесь случайные числа):

baza = np.array([[1, 25, 8, 9, 65, 34, 35, 68, 35, 98, 23, 46, 64],
		-----------------------------------------------------
		[2005, 35, 9, 10, 69, 37, 45, 78, 55, 113, 143, 416, 44],])

У нас на вход поступает (вводится последовательность из 7 чисел). Эти 7 чисел по порядку надо сравнить с первыми 7 числами из последовательностей, находящихся в массиве, исключая первое число в последовательности массива. То есть 1 число вводимой последовательности надо сравнить со 2 числом в последовательности из массива (потому что первое число в последовательности массива это просто порядковый номер и оно не входит в саму последовательность). Если выразить в индексах, то так это выглядит. Первая колонка вводимая последовательность, вторая последовательность из массива:
[0] = [1]
[1] = [2]
[2] = [3]
[3] = [4]
[4] = [5]
[5] = [6]
[7] = [8]
Далее в изложении вводимая последовательность – первая. В массиве последовательность – вторая.
Требуется найти и вывести на печать все последовательности в массиве удовлетворяющие следующим условиям:
Число с индексом 0 из первой последовательности должно быть равно или больше на 5 или же меньше на 5 числу с индексом 1 из второй последовательности. Вот так выглядит условие:
Если (число с индексом 0 из первой последовательности)–5 < (число с индексом 1 из второй последовательности) и (число с индексом 0 из первой последовательности)+5 > (число с индексом 1 из второй последовательности) то условие соблюдено и мы ищем совпадение следующего числа в последовательностях. То есть число из второй последовательности должно входить в диапазон плюс/минус 5 числа из первой последовательности.
И далее так же сравнить все остальные числа, с таким же диапазоном, то есть 2-е число из первой сравнить с 3-м числом из второй и так далее до всех 7 чисел. Если такая последовательность в массиве находится, то вывести в отдельный массив все такие последовательности и вывести на печать их также.
Надеюсь все понятно изложил. Помогите решить исключительно методами библиотеки NumPy, потому что скорость в данном случае важна, так как массив содержит много очень последовательностей. Если будет решение, то можно будет реализовать для любого числа последовательностей. Я думаю многим будет полезно.

Офлайн

#2 Май 26, 2016 09:50:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Решить задачу средствами NumPy

Oleg256
Я думаю многим будет полезно.
А я думаю это всем кроме вас абсолютно бесполезно. Выглядит так что вы просите решить эту задачу для вас.

То что можно сделать со списками можно делать и в numpy. Поэтому ваши затрудения непонятны. Где ваш код который решает задачу?
Вам надо смотреть в сторону срезов numpy, это будет быстрее чем работа с индексами.
посмотрите как работает
a=np.array([[0,1,2,3,4,5,6]]*10)
np.all(a[:,2:5]==np.array([1,2,3]))



Офлайн

#3 Май 26, 2016 10:28:58

Oleg256
Зарегистрирован: 2013-08-10
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Решить задачу средствами NumPy

Спасибо. Я понял. В общем пока и так работает достаточно быстро, но на будущее буду изучать NumPy основательно, по-любому пригодится.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version