Spec-Zone.ru › NumPy 1.20

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

См. также

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

Введение

Существует 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 и т.д.).

Общие текстовые форматы

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

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

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

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

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

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

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

Spec-Zone.ru

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