Создание массивов
См. также
Введение
Существует 5 основных механизмов для создания массивов:
- Преобразование из других структур Python (например, списков, кортежей)
- Встроенные объекты NumPy для создания массивов (например, arange, ones, zeros и т.д.)
- Чтение массивов с диска, из стандартных или пользовательских форматов
- Создание массивов из сырых байтов с использованием строк или буферов
- Использование специальных функций библиотек (например, 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