Различия между использованием 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, может содержать любые смешанные типы).

Другие вопросы по тегам