Возможно ли ускорить преобразование списка в массив в python? - PullRequest
1 голос
/ 08 апреля 2019

В моем коде я заметил, что преобразование списка в массив занимает значительное количество времени.

Мне интересно, есть ли более быстрые способы преобразования списка в массивв питоне вот три мои попытки:

import numpy as np
from timeit import  timeit
from array import array


added_data = range(100000)

def test1():
    np.asarray(added_data, dtype=np.float16)

def test2():
    np.array(added_data, dtype=np.float16)

def test3():
    array('f', added_data)

print(timeit(test1,number=100))
print(timeit(test2,number=100))
print(timeit(test3,number=100))

Другими словами:

Ввод: <тип 'список'>

Вывод: <тип 'array.array'>

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Маловероятно, что есть более быстрый способ преобразования списка значений в массив, чем очевидные и простые подходы, которые вы уже попробовали.Если бы был лучший способ, авторы numpy, вероятно, реализовали бы его в np.asarray или в самом конструкторе np.array.Я также хочу отметить, что array.array создает гораздо менее сложный объект, чем функции numpy, поэтому, вероятно, это не то, что вам нужно.

Что вы можете сделать, чтобы улучшить общую производительность вашей программы, так эточтобы избежать создания списка в первую очередь.Возможно, вы можете прочитать внешние данные из файла непосредственно в массив с np.loadtxt или np.load (в зависимости от того, как они отформатированы).Или, может быть, вы можете создать массив с нуля с помощью таких функций, как np.arange, вместо использования обычной функции Python, такой как range, которая (в Python 2) возвращает список.

0 голосов
/ 08 апреля 2019

Добавление элемента в массив numpy приведет к проблемам с производительностью.Никогда не делайте этого.

Альтернативы: 1- Добавление элементов в список и преобразование этого списка в массив numpy.

2 - использование дек из коллекций.Это лучший способ.

import collections
a = collections.deque([1,2,3,4])
a.append(5)
0 голосов
/ 08 апреля 2019

Результат будет тот же:

from array import array
def test4() :
    array = array('d')
    for item in added_data: # comma, or other
        array.append(item)

Но вы можете попробовать:

from array import array
def test5() :
    dataset_array = array('d')
    dataset_array.extend(added_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...