2016-10-11 6 views
0

Интересно, существует ли трюк для расширения массива numpy с последовательными номерами между каждыми первоначальными значениями, вплоть до пользовательской длины по умолчанию. Возможно, уже есть встроенная функция, которая превращает й в уБыстрое расширение массива numpy

x=np.array([4,8,4,10]) 

y=np.array([4,5,6,7,8,9,10,11,4,5,6,7,10,11,12,13]) 

Здесь длина между каждым элементом, который я добавил была три. Скорость здесь важна. Мне нужно что-то подобное, чтобы мои данные столбца работали над созданием разреженной матрицы .

Кроме того, если у меня есть массив, такие как

s=np.array([0,1]) 

есть быстрый способ расширить каждый элемент произвольного количества раз, позволяет сказать, 4, например:

s=np.array([0,0,0,0,1,1,1,1]) 
+0

Для второй половины вашего вопроса, взглянуть на numpy.repeat или numpy.tile. – Evert

ответ

2

, транслируемое дополнение, вероятно, является самым быстрым

In [241]: (x[:,None]+np.arange(4)).ravel() 
Out[241]: array([ 4, 5, 6, 7, 8, 9, 10, 11, 4, 5, 6, 7, 10, 11, 12, 13]) 

Это становится сложнее, если добавить diff для каждого подсписок.

repeat полезно:

In [242]: np.repeat(np.array([0,1]),[3,4]) 
Out[242]: array([0, 0, 0, 1, 1, 1, 1]) 

tile это еще один хороший инструмент.

+0

Все отличные методы ребята, этот был быстрее всех. Mahalo! – Canuck

0

Я не знаю, встроенную в функцию, которая делает именно это, но с некоторым творчеством вы можете сделать:

>>> x=np.array([4,8,4,10]) 
>>> np.array([x+i for i in range(4)]).T.ravel() 
array([ 4, 5, 6, 7, 8, 9, 10, 11, 4, 5, 6, 7, 10, 11, 12, 13]) 

Для второй половины вашего вопроса, взглянуть на numpy.repeat и numpy.tile.

0

Это работает в списках:

def extend(myList, n): 
    extensions = [range(x, x + n) for x in myList] 
    return [item for sublist in extensions for item in sublist] # flatten 

Использование следующим образом:

extend([4, 8, 4, 10], 4) 
Смежные вопросы