Различия между использованием numpy append или массива append - Python
У меня есть этот базовый пример, чтобы понять метод numpy append.
distances=[]
for i in range (8):
distances = np.append(distances, (i))
print(distances)
distances=[]
for i in range (8):
distances.append(i)
print(distances)
Вывод дает мне 2 массива, но в другом формате (или, как я понимаю, в другом формате).
[ 0. 1. 2. 3. 4. 5. 6. 7.]
[0, 1, 2, 3, 4, 5, 6, 7]
Чем отличаются оба массива и почему выходные данные отличаются?
3 ответа
Ваш второй метод - чистый python и не использует ничего, поэтому тип начинается с list ([]
) и остается таким, потому что list.append()
также возвращает список. Он содержит целые числа, потому что это то, что вы получаете из range
и ничто в вашем коде не меняет их.
Первый метод использует Numpy's append
метод, который возвращает ndarray, который по умолчанию использует float. Это также объясняет, почему ваш возвращаемый массив содержит числа с плавающей точкой.
Первый дает вам numpy.ndarray
и является результатом numpy
методы, второй производит list
и является результатом list
методы. Numpy массивы и списки Python - это не одно и то же.
Numpy массивы - это, по сути, объектно-ориентированные обертки вокруг типизированных, многомерных массивов фиксированного размера. numpy
методы массива оптимизированы для векторизованных численных расчетов, а также scipy
, обеспечить мощные возможности научных вычислений и линейной алгебры.
питон list
объекты являются неоднородными, изменяемого размера, списки массивов. Они оптимизированы для постоянного времени .append
, В самом деле, оба эти цикла будут масштабироваться очень по-разному. numpy.ndarray.append
требует создания совершенно нового массива на каждой итерации. питон list
Амортизировали постоянное время добавления. Таким образом, вы увидите квадратичный рост во время выполнения как размер вашего numpy.ndarray
масштабируется, тогда как со списком вы увидите линейное масштабирование.
Первый код
distances=[]
for i in range (8):
distances = np.append(distances, (i))
print(distances)
результаты в distances
быть array
из float
s. Пока второй код
distances=[]
for i in range (8):
distances.append(i)
print(distances)
результаты в distances
быть list
из int
s.
arrary
тип numpy (основное отличие: быстрее, все элементы имеют одинаковый тип), а list
является внутренним питоном (основное отличие: работает без numpy
, может содержать любые смешанные типы).