Spec-Zone.ru › NumPy 1.19

Создание массивов

См. также

Процедуры создания массивов

Введение

Существует 5 основных механизмов для создания массивов:

  1. Преобразование из других структур Python (например, списков, кортежей)
  2. Встроенные объекты NumPy для создания массивов (например, arange, ones, zeros и т.д.)
  3. Чтение массивов с диска, как из стандартных, так и из пользовательских форматов
  4. Создание массивов из сырых байтов с использованием строк или буферов
  5. Использование специальных функций библиотек (например, random)

В данном разделе не рассматриваются способы копирования, объединения или иного расширения или изменения существующих массивов. Также не рассматривается создание массивов объектов или структурированных массивов. Оба этих вопроса рассматриваются в отдельных разделах.

Преобразование объектов Python, подобных массивам, в массивы NumPy

В общем случае числовые данные, организованные в структуру, похожую на массив, в Python, могут быть преобразованы в массивы с помощью функции array(). Наиболее очевидные примеры — списки и кортежи. Подробности об использовании функции array() см. в документации. Некоторые объекты могут поддерживать протокол массива и допускать преобразование в массивы таким образом. Простой способ узнать, может ли объект быть преобразован в массив NumPy с помощью array(), — просто попробовать это интерактивно и посмотреть, работает ли это! (Python-овский подход).

Примеры:

>>> x = np.array([2,3,1,0])
>>> x = np.array([2, 3, 1, 0])
>>> x = np.array([[1,2.0],[0,0],(1+1j,3.)]) # note mix of tuple and lists,
    and types
>>> x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])

Встроенное создание массивов NumPy

NumPy предоставляет встроенные функции для создания массивов с нуля:

zeros(shape) создаёт массив, заполненный значениями 0, с заданной формой. По умолчанию используется тип данных float64.

>>> np.zeros((2, 3))
array([[ 0., 0., 0.], [ 0., 0., 0.]])

ones(shape) создаёт массив, заполненный значениями 1. Она идентична zeros во всех других аспектах.

arange() создаёт массивы с регулярно увеличивающимися значениями. Полную информацию о различных способах её использования см. в строке документации. Здесь будут приведены несколько примеров:

>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(2, 10, dtype=float)
array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])

Обратите внимание, что существует ряд тонкостей, касающихся последнего способа использования, о которых пользователь должен знать, описанных в строке документации arange.

linspace() создаёт массивы с заданным количеством элементов, равномерно распределённых между заданными начальными и конечными значениями. Например:

>>> np.linspace(1., 4., 6)
array([ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ])

Преимущества этой функции создания в том, что можно гарантировать количество элементов и начальную и конечную точку, чего arange() обычно не делает для произвольных значений start, stop и step.

indices() создаёт набор массивов (склеенных в массив на один порядок выше), по одному на каждую размерность, при этом каждый представляет собой изменение в данной размерности. Пример лучше иллюстрирует, чем словесное описание:

>>> np.indices((3,3))
array([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[0, 1, 2], [0, 1, 2], [0, 1, 2]]])

Это особенно полезно для вычисления функций нескольких измерений на регулярной сетке.

Чтение массивов с диска

Предположительно, это наиболее распространённый случай создания больших массивов. Подробности, конечно же, сильно зависят от формата данных на диске, поэтому этот раздел может только дать общие рекомендации по работе с различными форматами.

Стандартные двоичные форматы

Различные области имеют стандартные форматы данных массивов. Ниже перечислены те, для которых есть известные библиотеки Python для их чтения и возврата массивов NumPy (могут быть и другие, для которых возможно чтение и преобразование в массивы NumPy, поэтому проверьте также последний раздел).

HDF5: h5py
FITS: Astropy

Примеры форматов, которые нельзя напрямую прочитать, но для которых несложно выполнить преобразование, — это форматы, поддерживаемые библиотеками, такими как PIL (способными читать и записывать многие форматы изображений, такие как jpg, png и т. д.).

Общие ASCII-форматы

Файлы с разделителями (CSV) широко используются (и являются вариантом экспорта и импорта для программ, таких как Excel). Существует множество способов чтения этих файлов в Python. В Python есть функции CSV, а также функции в pylab (часть matplotlib).

Более общие ASCII-файлы можно читать с помощью пакета io в scipy.

Пользовательские двоичные форматы

Существует множество подходов. Если формат файла относительно прост, то можно написать простую библиотеку ввода-вывода и использовать функцию numpy fromfile() и метод .tofile() для прямого чтения и записи массивов NumPy (однако следите за порядком байтов!). Если существует хорошая библиотека C или C++, которая считывает данные, её можно обернуть с помощью различных техник, хотя это, безусловно, более сложная задача и требует значительно более продвинутых знаний для взаимодействия с C или C++.

Использование специальных библиотек

Существуют библиотеки, которые могут использоваться для генерации массивов для специальных целей, и перечислить все их невозможно. Наиболее распространённые случаи — использование многочисленных функций генерации массивов в random для генерации массивов случайных значений и некоторых служебных функций для генерации специальных матриц (например, диагональных).

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/user/basics.creation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API