Numpy ndarray tolist() для преобразования массива в список в Python
Мы можем использовать функцию numpy ndarray tolist() для преобразования массива в список. Если массив многомерный, возвращается вложенный список. Для одномерного массива возвращается список с элементами массива.
Массив NumPy для списка
Функция tolist() не принимает никаких аргументов. Это простой способ преобразовать массив в представление списка.
1. Преобразование одномерного массива NumPy в список
import numpy as np # 1d array to list arr = np.array([1, 2, 3]) print(f'NumPy Array:\n') list1 = arr.tolist() print(f'List: ')
NumPy Array: [1 2 3] List: [1, 2, 3]
2. Преобразование многомерного массива NumPy в список
import numpy as np # 2d array to list arr = np.array([[1, 2, 3], [4, 5, 6]]) print(f'NumPy Array:\n') list1 = arr.tolist() print(f'List: ')
NumPy Array: [[1 2 3] [4 5 6]] List: [[1, 2, 3], [4, 5, 6]]
Как преобразовать массив NumPy в список в Python (с примерами)
Вы можете использовать следующий базовый синтаксис для преобразования массива NumPy в список в Python:
my_list = my_array. tolist ()
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1. Преобразование одномерного массива в список
В следующем коде показано, как преобразовать одномерный массив NumPy в список в Python:
import numpy as np #create NumPy array my_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #convert NumPy array to list my_list = my_array. tolist () #view list print(my_list) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #view object type type (my_list) list
Пример 2. Преобразование многомерного массива в список
В следующем коде показано, как преобразовать многомерный массив NumPy в список в Python:
import numpy as np #create NumPy array my_array = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) #convert NumPy array to list my_list = my_array. tolist () #view list print(my_list) [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] #view object type type (my_list) list
Пример 3. Преобразование многомерного массива в плоский список
В следующем коде показано, как преобразовать многомерный массив NumPy в плоский список в Python:
import numpy as np #create NumPy array my_array = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) #convert NumPy array to flattened list my_list = my_array. flatten().tolist () #view list print(my_list) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #view object type type (my_list) list
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные преобразования в Python:
Как преобразовать список в массив NumPy (с примерами)
Вы можете использовать следующий базовый синтаксис для преобразования списка в Python в массив NumPy:
import numpy as np my_list = [1, 2, 3, 4, 5] my_array = np.asarray (my_list)
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1: преобразование списка в массив NumPy
Следующий код показывает, как преобразовать список в Python в массив NumPy:
import numpy as np #create list of values my_list = [3, 4, 4, 5, 7, 8, 12, 14, 14, 16, 19] #convert list to NumPy array my_array = np.asarray (my_list) #view NumPy array print(my_array) [ 3 4 4 5 7 8 12 14 14 16 19] #view object type type (my_array) numpy.ndarray
Обратите внимание, что вы также можете использовать аргумент dtype , чтобы указать определенный тип данных для нового массива NumPy при выполнении преобразования:
import numpy as np #create list of values my_list = [3, 4, 4, 5, 7, 8, 12, 14, 14, 16, 19] #convert list to NumPy array my_array = np.asarray (my_list, dtype=np.float64 ) #view data type of NumPy array print(my_array. dtype ) float64
Пример 2: преобразование списка списков в массив массивов NumPy
В следующем коде показано, как преобразовать список списков в массив массивов NumPy:
import numpy as np #create list of lists my_list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #convert list to NumPy array my_array = np.asarray (my_list_of_lists) #view NumPy array print(my_array) [[1 2 3] [4 5 6] [7 8 9]]
Затем мы можем использовать функцию формы , чтобы быстро получить размеры нового массива массивов:
print(my_array. shape ) (3, 3)
Это говорит нам о том, что массив массивов NumPy имеет три строки и три столбца.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные преобразования данных в Python:
Преобразование массива примитивов в список
В этом коротком уроке мы покажем, как преобразовать массив примитивов в список объектов соответствующего типа . Как правило, мы можем попытаться использовать автоупаковку в Java. Однако, как мы увидим в следующем разделе, наша интуиция о том, как работает автобокс, часто может быть ошибочной.
2. Проблема
Начнем с определения проблемы. У нас есть массив примитивов ( int[] ), и мы хотим преобразовать этот массив в список ( List ). Интуитивной первой попыткой может быть:
int[] input = new int[]1,2,3,4>; ListInteger> output = Arrays.asList(input);
К сожалению, это не скомпилируется из-за несовместимости типов . Мы могли бы ожидать, что автоупаковка будет работать с массивами примитивов. Однако это инстинктивное убеждение неверно.
Автоупаковка происходит только для одного элемента (например, от int до Integer ). Нет автоматического преобразования массива примитивных типов в массив их упакованных ссылочных типов (например, из int[] в Integer[] ).
Давайте начнем реализовывать несколько решений этой проблемы.
3. Итерация
Поскольку автоупаковка работает с отдельными примитивными элементами, простое решение состоит в том, чтобы просто перебирать элементы массива и добавлять их в список один за другим :
int[] input = new int[]1,2,3,4>; ListInteger> output = new ArrayListInteger>(); for (int value : input) output.add(value); >
Мы решили проблему, но решение довольно многословно. Это подводит нас к следующей реализации.
4. Потоки
Начиная с Java 8 мы можем использовать Stream API . Мы можем предоставить однострочное решение, используя Stream :
int[] input = new int[]1,2,3,4>; ListInteger> output = Arrays.stream(input).boxed().collect(Collectors.toList());
В качестве альтернативы мы могли бы использовать IntStream :
int[] input = new int[]1,2,3,4>; ListInteger> output = IntStream.of(input).boxed().collect(Collectors.toList());
Это, конечно, выглядит намного красивее. Далее мы рассмотрим пару внешних библиотек.
5. Гуава
Библиотека Guava обеспечивает решение этой проблемы . Начнем с добавления зависимости Maven :
dependency> groupId>com.google.guavagroupId> artifactId>guavaartifactId> version>31.0.1-jreversion> type>bundletype> dependency>
Мы можем использовать Ints.asList() с аналогичными служебными классами для других примитивных типов:
int[] input = new int[]1,2,3,4>; ListInteger> output = Ints.asList(input);
6. Апач Коммонс
Другой библиотекой является Apache Commons Lang . Опять же, давайте добавим зависимость Maven для этой библиотеки:
dependency> groupId>org.apache.commonsgroupId> artifactId>commons-lang3artifactId> version>3.12.0version> dependency>
Точнее, мы используем класс ArrayUtils :
int[] input = new int[]1,2,3,4>; Integer[] outputBoxed = ArrayUtils.toObject(input); ListInteger> output = Arrays.asList(outputBoxed);
7. Заключение
Теперь у нас есть несколько вариантов в нашем наборе инструментов для преобразования массива примитивов в список . Как мы видели, автоупаковка происходит только для отдельных элементов. В этом руководстве мы рассмотрели несколько решений для применения преобразования .
Как всегда, полный исходный код статьи доступен на GitHub .