NumPy
NumPy — это библиотека для языка программирования Python, обеспечивающая поддержку больших многомерных массивов и матриц, а также обширный набор математических функций для операций над этими массивами[2]. Предшественником NumPy была библиотека Numeric, созданная Джимом Хугунином при участии ряда других разработчиков. В 2005 году Трэвис Олифант разработал NumPy, интегрировав в Numeric возможности конкурирующего проекта Numarray и существенно доработав код. NumPy распространяется как программное обеспечение с открытым исходным кодом и поддерживается сообществом. Финансовую поддержку проекту оказывает организация NumFOCUS[3]. Проект находится в стадии активной разработки; в июне 2024 года состоялся выпуск NumPy 2.0 — первого крупного релиза с 2006 года, который внёс значительные изменения в API, оптимизации производительности и новые функции[4][5].
Общие сведения
| NumPy | |||
|---|---|---|---|
| Тип | численные вычисления | ||
| Автор | Трэвис Олифант | ||
| Разработчик | Сообщество проекта | ||
| Написана на | Python, C, C++, Fortran | ||
| Интерфейс | программный интерфейс (API) | ||
| Движки | Низкоуровневое ядро на C и Fortran | ||
| Операционная система | кроссплатформенная | ||
| Языки интерфейса | английский | ||
| Первый выпуск | как Numeric — 1995; как NumPy — 2006 | ||
| Аппаратные платформы | x86-64, ARM, IBM POWER, RISC-V | ||
| Последняя версия | 2.3.4 (15 октября 2025) | ||
| Репозиторий | github.com/numpy/numpy | ||
| |||
| |||
| Состояние | активное | ||
| Лицензия | BSD[1] | ||
| Сайт | numpy.org | ||
История
Язык программирования Python изначально не предназначался для научных вычислений, однако с ранних этапов заинтересовал научное и инженерное сообщество. В 1995 году была учреждена специальная группа matrix-sig (SIG) с целью создания модульной поддержки массивов; в состав группы входил создатель Python Гвидо ван Россум, который расширил синтаксис Python (в частности, синтаксис индексации[6]), чтобы облегчить программирование с использованием массивов[7].
Реализация модуля для работы с матрицами была завершена Джимом Фултоном, а затем обобщена Джимом Хугунином и названа «Numeric»[7] (также упоминалась как «Numerical Python extensions» или «NumPy»), с заимствованиями из языков APL, Basis, MATLAB, Фортран, S и S+, и других[8][9]. Хугунин, работавший аспирантом в MIT[9],:10 перешёл в CNRI в 1997 году для работы над JPython[7], после чего ведение проекта перешло к Полу Дюбуа из Ливерморской национальной лаборатории (LLNL)[9].:10 Среди ранних участников были также Дэвид Ашер, Конрад Хинсен и Трэвис Олифант[9]:10
Для большей гибкости был разработан новый пакет под названием Numarray. Как и Numeric, он теперь считается устаревшим[10].[11]. Numarray обеспечивал более высокую производительность на больших массивах, но уступал Numeric на малых[12], поэтому некоторое время оба пакета использовались параллельно. Последняя версия Numeric (v24.2) вышла 11 ноября 2005 года, а последняя версия Numarray (v1.5.2) — 24 августа 2006[13].
Попытки включить Numeric в стандартную библиотеку Python не были реализованы из-за проблем с поддержкой исходного кода[14].
В начале 2005 года разработчик NumPy Трэвис Олифант с целью объединения сообщества перенёс функционал Numarray в Numeric и выпустил итоговый пакет под названием NumPy 1.0 в 2006 году. Этот проект стал частью SciPy. Чтобы не требовать установки большого пакета SciPy только ради объекта массива, NumPy был выделен как отдельная библиотека. Поддержка Python 3 была добавлена с версией NumPy 1.5.0 в 2011 году[15].
В последующие годы библиотека продолжила активно развиваться. В 2012 году вышел релиз 1.6.2, содержавший большое количество исправлений[16]. Версия 1.8 (2013) перешла на единую кодовую базу для Python 2 и 3, отказавшись от утилиты 2to3[17]. Важным шагом стал выпуск NumPy 1.17 в 2019 году, который полностью прекратил поддержку Python 2.7 и представил новый расширяемый генератор случайных чисел[18]. В 2023 году, с выходом версии 1.26, проект перешёл на систему сборки Meson для поддержки Python 3.12[19]. В июне 2024 года состоялся выпуск NumPy 2.0 — первого крупного релиза с 2006 года, который внёс значительные изменения в API и производительность. Проект продолжает активно развиваться[20]: в июне 2025 года вышла версия 2.3.0[20], а последней стабильной версией является 2.3.4 от 15 октября 2025 года[20][21].
В 2011 году проект PyPy начал разработку собственной реализации NumPy API, известной как NumPyPy[22]. Впоследствии этот проект был признан устаревшим[23][24]. На 2025 год стандартный пакет NumPy полностью совместим с PyPy и устанавливается через pip[23]. Совместимость обеспечивается через слой эмуляции CPython C API под названием cpyext, который, однако, может приводить к снижению производительности по сравнению с CPython из-за накладных расходов[23][25]. Долгосрочным решением этой проблемы считается проект HPy — новый универсальный C API, который позволит C-расширениям, включая NumPy, работать на PyPy с сопоставимой с CPython скоростью[23][26].
Разработка и управление
NumPy является проектом с открытым исходным кодом, который находится в стадии активной разработки. Проект поддерживается большим и разнообразным сообществом на платформе GitHub[27]. О динамичном развитии свидетельствуют регулярные обновления, наличие публичной дорожной карты (roadmap)[28] и крупные релизы, такие как NumPy 2.0 в 2024 году — первое значительное обновление API с 2006 года.
Процесс внесения существенных изменений в библиотеку формализован через систему предложений по улучшению NumPy (NumPy Enhancement Proposals, или NEP). Эта система была введена в конце 2017 года и служит основным механизмом для предложения новых крупных функций, сбора мнений сообщества и документирования проектных решений[29].
Долгое время проект развивался исключительно на волонтёрских началах, однако в 2017 году он впервые получил значительное финансирование в размере 645 020 долларов от фонда Гордона и Бетти Мур[30]. В последующие годы финансовую поддержку оказывала Chan Zuckerberg Initiative (CZI) в рамках программы поддержки критически важного открытого ПО для науки: гранты были выделены в 2019, 2020 и 2021 годах на улучшение структуры управления, документации, удобства использования и инициативы по повышению разнообразия и инклюзивности в сообществе[31].
Для тестирования новейших функций и исправлений доступны предрелизные сборки. К ним относятся «ночные сборки» (nightly builds), которые автоматически создаются из основной ветки разработки и могут быть установлены из специального репозитория[32][33]. Кроме того, любой желающий может скомпилировать библиотеку напрямую из исходного кода, чтобы получить доступ к самой актуальной версии проекта[34]. Такие сборки активно используются как разработчиками NumPy, так и авторами других библиотек для заблаговременной адаптации своего кода к предстоящим изменениям[35].
Возможности
NumPy рассчитан на работу с CPython, референсной (интерпретируемой) реализацией Python. Написанные для неё математические алгоритмы часто работают медленнее компилируемых эквивалентов из-за отсутствия оптимизации компилятора. NumPy компенсирует эту особенность, предоставляя многомерные массивы и эффективные операции над ними, что требует частичного переписывания, главным образом «внутренних циклов», с использованием функций и операторов NumPy.
Взаимодействие с NumPy осуществляется не через графический интерфейс, а через программный интерфейс приложения (API)[36]. Основным языком для работы с библиотекой является Python[37], однако библиотека также предоставляет C API для интеграции с внешними библиотеками, написанными на C, и оптимизации производительности[38]. Кроме того, существуют сторонние проекты, предоставляющие привязки (bindings) для использования NumPy в среде .NET на языках C# и F#[39].
Библиотека поддерживает широкий спектр аппаратных платформ на уровне центральных процессоров (CPU), используя для ускорения вычислений специфичные для них наборы инструкций (SIMD)[40]. К поддерживаемым архитектурам относятся x86-64, ARM (включая Apple silicon), IBM POWER и RISC-V[40].
Использование NumPy приближает возможности Python к MATLAB, поскольку оба решения являются интерпретируемыми[41] и позволяют быстро обрабатывать данные, если основная работа осуществляется над массивами/матрицами, а не скалярными значениями. При этом MATLAB обладает развитой экосистемой дополнительных модулей (напр., Simulink), в то время как NumPy глубоко интегрирован с Python. Доступны дополнительные библиотеки: SciPy предоставляет более широкий функционал для научных расчётов, а Matplotlib — инструменты для визуализации, аналогичные средствам MATLAB. Для работы с разрежёнными матрицами требуется использование модуля scipy.sparse. Внутри NumPy и MATLAB используют BLAS и LAPACK для операций линейной алгебры.
Связки Python с популярной библиотекой компьютерного зрения OpenCV используют массивы NumPy для хранения и обработки данных. Поскольку изображения с несколькими каналами могут быть представлены трёхмерными массивами, индексация, срезы и маскирование удобно реализуются через стандартные операции NumPy, что упрощает процесс программирования и отладки.
Многие операции NumPy освобождают глобальную блокировку интерпретатора, что позволяет использовать многопоточную обработку[42].
Основным элементом NumPy является структура «ndarray» (n-мерный массив данных). В отличие от стандартных списков Python, массив NumPy содержит элементы одинакового (гомогенного) типа, что позволяет хранить их в виде непрерывного блока в памяти и обеспечивает высокую скорость вычислений[43].
Объект ndarray представляет собой срез памяти и характеризуется несколькими ключевыми атрибутами[43]:
ndarray.data— буфер памяти, где физически хранятся элементы массива.ndarray.shape— кортеж, описывающий размер массива по каждой из его осей (измерений).ndarray.dtype— объект, описывающий тип данных элементов в массиве (например,int32,float64).ndarray.strides— кортеж, указывающий, сколько байт нужно «перешагнуть» в памяти, чтобы перейти к следующему элементу вдоль каждой оси. Эта система позволяет эффективно выполнять такие операции, как транспонирование или создание срезов, без копирования данных.
Массивы могут быть представлены как в собственных буферах памяти, так и интегрироваться с расширениями, написанными на C, C++, Python или Фортран, что обеспечивает совместимость с существующими вычислительными библиотеками. Эта функциональность активно используется в SciPy, который реализует обёртки для таких библиотек, как BLAS и LAPACK. В NumPy предусмотрена поддержка memory-mapped ndarrays.
Высокая производительность NumPy обеспечивается многоуровневой архитектурой, в которой высокоуровневый интерфейс на Python управляет быстрыми вычислениями, реализованными на компилируемых языках[44]. Основная часть библиотеки написана на Python и C, также используются C++ и Fortran. Python используется для создания высокоуровневого API, а C, C++ и Fortran — для написания производительного ядра и интеграции с существующими вычислительными библиотеками, такими как BLAS и LAPACK[44].
Ключевыми компонентами архитектуры являются:
- Низкоуровневое ядро. Большинство математических алгоритмов и операций над массивами реализованы на C и Fortran, что позволяет выполнять вычисления значительно быстрее, чем на интерпретируемом Python[44].
- C-API. NumPy предоставляет C-API — интерфейс, который служит «мостом» между кодом на Python и низкоуровневым ядром[45]. Он позволяет вызывать функции ядра из Python, манипулировать массивами `ndarray` напрямую из кода на C и расширять NumPy собственными модулями[46].
- Универсальные функции (ufunc). Это функции, выполняющие быстрые поэлементные операции над массивами `ndarray` (например, `np.add`, `np.sin`). Они реализованы на C и используют векторизацию, при которой цикл операции выполняется на уровне скомпилированного кода, а не в Python, что многократно ускоряет вычисления[47].
- Внутренние модули. Архитектура включает несколько ключевых модулей, организующих функциональность[47]:
- `Core`: определяет основные объекты, такие как `ndarray` и типы данных.
- `Multiarray`: отвечает за работу с многомерными массивами, включая векторизацию и механизм «трансляции» (broadcasting).
- `Umath` (Universal Math): содержит универсальные математические функции (ufunc).
Кроме того, NumPy включает подпакеты для конкретных задач, такие как `numpy.linalg` для линейной алгебры, `numpy.fft` для преобразования Фурье и `numpy.random` для генерации случайных чисел[48].
Вставка или добавление элементов в массив NumPy не так тривиальна, как для списков Python. Например, функция np.pad(...) фактически создаёт новый массив требуемой формы, копирует туда данные и возвращает результат. Аналогично, np.concatenate([a1,a2]) создаёт новый массив, а не объединяет исходные без копирования. Изменение размерности с помощью np.reshape(...) возможно только при сохранении числа элементов. Это связано с тем, что массивы должны быть представлением непрерывного буфера памяти.
Алгоритмы, не реализуемые векторизацией, обычно выполняются медленнее (требуют pure Python), а сама векторизация может привести к увеличению требуемой памяти за счёт создания временных массивов. Для обхода этих ограничений были разработаны дополнительные средства компиляции численного кода, совместимые с NumPy: numexpr[49] и Numba[50] (JIT), а также статические компиляторы Cython и Pythran.
Многие современные задачи обработки больших данных ставят требования, которые выходят за рамки возможностей стандартных массивов NumPy. Например, массивы обычно должны помещаться в ОЗУ, что может быть недостаточно для анализа очень больших наборов данных, а операции NumPy по умолчанию выполняются на одном ЦП. В связи с этим был разработан ряд специализированных библиотек, которые расширяют возможности NumPy, сохраняя при этом совместимость с его API, особенно после выхода NumPy 2.0.
- Dask позволяет работать с распределёнными массивами, которые не помещаются в память, и выполняет вычисления параллельно. Проект активно поддерживает совместимость с последними версиями NumPy, что подтверждается выпуском Dask 2025.10.0 в октябре 2025 года, содержащим обновления для совместимости с NumPy 2.2[51].
- JAX предназначен для высокопроизводительных вычислений на GPU и TPU. Несмотря на схожий API, JAX имеет фундаментальные отличия, такие как неизменяемость массивов. С сентября 2025 года JAX требует NumPy версии 2.0 или новее, а релиз JAX 0.8.0 (октябрь 2025) дополнительно улучшил совместимость с NumPy 2.2[52].
- CuPy предоставляет NumPy-подобный интерфейс для вычислений на GPU с использованием CUDA от Nvidia. Библиотека стремится быть «заменой» NumPy с минимальными изменениями в коде. Версия v13.5.0 (август 2025) улучшила совместимость с NumPy 2.0 и добавила поддержку NumPy 2.3[53].
- TensorFlow предоставляет модуль `tf.experimental.numpy`, который реализует подмножество API NumPy для выполнения кода в экосистеме TensorFlow. Это позволяет использовать привычный синтаксис NumPy для операций с тензорами[54].
- MLX — фреймворк от Apple, представленный в 2025 году и разработанный для чипов Apple silicon. Он имеет API, намеренно схожий с NumPy, но отличается моделью унифицированной памяти (без копирования данных между CPU и GPU) и ленивыми вычислениями[55][56].
Работа с файлами
NumPy предоставляет встроенные средства для сохранения массивов на диск и их последующей загрузки. Поддерживаются как простые текстовые форматы, так и собственные бинарные форматы, оптимизированные для скорости и эффективности.
Текстовые файлы (например, CSV) являются человекочитаемыми, что делает их удобными для обмена данными с другими программами. Для работы с ними предназначены следующие функции:
- Чтение. Для загрузки данных из текстовых файлов используются две основные функции:
numpy.loadtxt()— быстрая функция, предназначенная для загрузки однородных данных без пропусков[57]. Позволяет указать разделитель, пропустить заголовки и выбрать определённые столбцы[58].numpy.genfromtxt()— более гибкая функция, способная обрабатывать файлы с пропущенными значениями, заменяя их на указанные (например,np.nan)[59].
- Запись. Функция
numpy.savetxt()сохраняет массив (обычно одномерный или двумерный) в текстовый файл, такой как .txt или .csv[60]. Можно задать формат вывода чисел и разделитель столбцов[61].
Для эффективного хранения данных NumPy предлагает собственные бинарные форматы, которые сохраняют полную информацию о массиве (форму, тип данных) и обеспечивают высокую скорость чтения и записи[62].
.npy— стандартный формат для сохранения одного массива NumPy. Для записи используется функцияnumpy.save(), а для чтения —numpy.load()[59]..npz— это ZIP-архив, который может содержать несколько массивов, каждый в отдельном файле формата .npy[63]. Это удобно для сохранения связанных наборов данных. Файлы создаются с помощью функций:numpy.savez()— создаёт несжатый архив.numpy.savez_compressed()— создаёт сжатый архив, что позволяет экономить дисковое пространство[63].
Загрузка .npz-файлов также осуществляется функцией numpy.load(), которая возвращает объект, подобный словарю, где ключами служат имена массивов, а значениями — сами массивы[63].
Помимо основных форматов, существуют функции для работы с «сырыми» бинарными данными. Метод ndarray.tofile() записывает содержимое массива в файл без метаданных, а функция numpy.fromfile() считывает данные из такого файла, требуя явного указания типа данных[64].
Для работы с более сложными форматами файлов, такими как Excel (.xls, .xlsx) или научными форматами данных (например, HDF5), обычно используются специализированные библиотеки, которые тесно интегрируются с NumPy:
- Pandas — эффективно работает со сложными табличными данными (CSV, Excel) и позволяет легко преобразовывать их в массивы NumPy и обратно[65].
- h5py, Zarr — библиотеки для работы с иерархическими форматами, предназначенными для хранения очень больших наборов данных, которые могут не помещаться в ОЗУ[65].
Примеры
NumPy обычно импортируется как np[66].
import numpy as np
from numpy.typing import NDArray
a: NDArray[int] = np.array([[1, 2, 3, 4], [3, 4, 6, 7], [5, 9, 0, 5]])
a.transpose()
from numpy.typing import NDArray
a: NDArray[int] = np.array([1, 2, 3, 6])
b: NDArray[int] = np.linspace(0, 2, 4)
c: NDArray[int] = a - b
print(c)
# вывод: array([ 1. , 1.33333333, 1.66666667, 4. ])
print(a ** 2)
# вывод: array([ 1, 4, 9, 36])
from numpy.typing import NDArray, float64
a: NDArray[float64] = np.linspace(-np.pi, np.pi, 100)
b: float64 = np.sin(a)
c: float64 = np.cos(a)
print(np.sin(1))
# вывод: 0.8414709848078965
print(np.sin(np.array([1, 2, 3])))
# вывод: array([0.84147098, 0.90929743, 0.14112001])
import numpy as np
from numpy.linalg import solve, inv
from numpy.random import rand
from numpy.typing import NDArray, float32
a: NDArray[float32] = np.array([[1, 2, 3], [3, 4, 6.7], [5, 9.0, 5]])
print(a.transpose())
# вывод:
# array([[ 1. , 3. , 5. ],
# [ 2. , 4. , 9. ],
# [ 3. , 6.7, 5. ]])
print(inv(a))
# вывод:
# array([[-2.27683616, 0.96045198, 0.07909605],
# [ 1.04519774, -0.56497175, 0.1299435 ],
# [ 0.39548023, 0.05649718, -0.11299435]])
b: NDArray[int] = np.array([3, 2, 1])
print(solve(a, b))
# вывод: array([-4.83050847, 2.13559322, 1.18644068])
c: NDArray[float32] = rand(3, 3) * 20
print(c)
# вывод:
# array([[ 3.98732789, 2.47702609, 4.71167924],
# [ 9.24410671, 5.5240412 , 10.6468792 ],
# [ 10.38136661, 8.44968437, 15.17639591]])
print(np.dot(a, c))
# вывод:
# array([[ 53.61964114, 38.8741616 , 71.53462537],
# [ 118.4935668 , 86.14012835, 158.40440712],
# [ 155.04043289, 104.3499231 , 195.26228855]])
print(a @ c)
# вывод:
# array([[ 53.61964114, 38.8741616 , 71.53462537],
# [ 118.4935668 , 86.14012835, 158.40440712],
# [ 155.04043289, 104.3499231 , 195.26228855]])
import numpy as np
from numpy.typing import NDArray, float64
M: NDArray[float64] = np.zeros(shape=(2, 3, 5, 7, 11))
T: NDArray[float64] = np.transpose(M, (4, 2, 1, 3, 0))
print(T.shape)
# вывод: (11, 5, 3, 7, 2)
import cv2
import numpy as np
from numpy.typing import NDArray, float32
r: NDArray[float32] = np.reshape(np.arange(256*256)%256,(256,256))
g: NDArray[float32] = np.zeros_like(r)
b: NDArray[float32] = r.T
print(cv2.imwrite("gradients.png", np.dstack([b,g,r])))
# вывод: True
Функциональный вариант Python и векторизованный вариант NumPy.
### Пример на функциональном Python ###
from typing import Callable, List
points: List[List[int]] = [[9,2,8],[4,7,2],[3,4,4],[5,6,9],[5,0,7],[8,2,7],[0,3,2],[7,3,0],[6,1,1],[2,9,6]]
qPoint: List[int] = [4,5,3]
edistance: Callable[[List[float], List[float]], float] = lambda a, b: sum((a1 - b1) ** 2 for a1, b1 in zip(a, b)) ** 0.5
nearest: List[int] = min((edistance(i, qPoint), i) for i in points)[1]
print(f"Nearest point to q: {nearest}")
# вывод: Nearest point to q: [3, 4, 4]
### Аналог на NumPy ###
import numpy as np
from numpy.typing import NDArray
points: NDArray[int] = np.array([[9,2,8],[4,7,2],[3,4,4],[5,6,9],[5,0,7],[8,2,7],[0,3,2],[7,3,0],[6,1,1],[2,9,6]])
qPoint: NDArray[int] = np.array([4,5,3])
minIdx: int = np.argmin(np.linalg.norm(points-qPoint, axis=1))
print(f"Nearest point to q: {points[minIdx]}")
# вывод: Nearest point to q: [3 4 4]
Быстрое подключение кода на Fortran к Python-скриптам[67][68].[69]
В последних версиях библиотеки продолжилось развитие инструмента. Важным изменением стал продолжающийся переход от `distutils` к Meson в качестве системы сборки, что стало поведением по умолчанию для F2PY начиная с NumPy 1.26.x при использовании Python 3.12 и новее[70]. При этом Meson не устанавливается как прямая зависимость, и пользователь должен самостоятельно настроить сборочное окружение[71]. Релиз NumPy 2.2.0 (декабрь 2024 года) исправил регрессию, из-за которой F2PY некорректно обрабатывал модули, содержащие только присваивания переменных, а также устранил проблемы при работе с несколькими модулями в одном файле[72].
! Пример вызова нативного кода Fortran из Python через f2py
subroutine ftest(a, b, n, c, d)
implicit none
integer, intent(in) :: a, b, n
integer, intent(out) :: c, d
integer :: i
c = 0
do i = 1, n
c = a + b + c
end do
d = (c * n) * (-1)
end subroutine ftest
from typing import Tuple
import foo
import numpy as np
a: Tuple[int, int] = foo.ftest(1, 2, 3)
print(a)
# вывод: (9,-27)
help("foo.ftest")
# описание: foo.ftest.__doc__
Примечания
- ↑ NumPy — NumPy. numpy.org. NumPy developers. Дата обращения: 1 сентября 2025.
- ↑ van der Walt, Stéfan; Colbert, S. Chris; Varoquaux, Gaël (2011). “The NumPy array: a structure for efficient numerical computation”. Computing in Science and Engineering. IEEE. 13 (2): 22. arXiv:1102.1523. Bibcode:2011CSE....13b..22V. DOI:10.1109/MCSE.2011.37. S2CID 16907816. Дата обращения 2025-09-01.
|access-date=требует|url=(справка) - ↑ NumFOCUS Sponsored Projects. NumFOCUS. Дата обращения: 25 октября 2021. Архивировано 28 сентября 2025 года.
- ↑ NumPy 2.0.0: первое крупное обновление библиотеки для Python с 2006 года. Habr. Дата обращения: 2 ноября 2025.
- ↑ Python-библиотека NumPy обновилась впервые с 2006 года. Skillbox Media. Дата обращения: 2 ноября 2025.
- ↑ Индексация — Руководство по NumPy v1.20. numpy.org. Дата обращения: 6 апреля 2021. Архивировано 18 июня 2020 года.
- ↑ 1 2 3 Millman, K. Jarrod; Aivazis, Michael (2011). “Python for Scientists and Engineers”. Computing in Science and Engineering. 13 (2): 9—12. Bibcode:2011CSE....13b...9M. DOI:10.1109/MCSE.2011.36. Архивировано из оригинала 2019-02-19. Дата обращения 2014-07-07. Используется устаревший параметр
|url-status=(справка) - ↑ Travis Oliphant (2007). “Python for Scientific Computing” (PDF). Computing in Science and Engineering. Архивировано из оригинала (PDF) 2013-10-14. Дата обращения 2013-10-12. Используется устаревший параметр
|url-status=(справка) - ↑ 1 2 3 4 Numerical Python (1999). Архивировано 19 марта 2025 года.
- ↑ Numarray Homepage. Дата обращения: 24 июня 2006. Архивировано 10 января 2003 года.
- ↑ Travis E. Oliphant. Guide to NumPy. — 7 December 2006.
- ↑ Travis Oliphant и другие разработчики SciPy. [Numpy-discussion] Status of Numeric. Дата обращения: 2 февраля 2017. Архивировано 22 сентября 2017 года.
- ↑ NumPy Sourceforge Files. Дата обращения: 24 марта 2008. Архивировано 17 апреля 2001 года.
- ↑ История SciPy — SciPy wiki. scipy.github.io. Архивировано 5 августа 2025 года.
- ↑ NumPy 1.5.0 Release Notes. Дата обращения: 29 апреля 2011. Архивировано 12 сентября 2010 года.
- ↑ NumPy 1.6.2 Release Notes. NumPy developers. Дата обращения: 2 ноября 2025.
- ↑ NumPy 1.8.0 Release Notes. NumPy developers. Дата обращения: 2 ноября 2025.
- ↑ NumPy 1.17.0 Release Notes. NumPy developers. Дата обращения: 2 ноября 2025.
- ↑ NumPy 1.26.0 Release Notes. NumPy developers. Дата обращения: 2 ноября 2025.
- ↑ 1 2 3 News. NumPy developers. Дата обращения: 2 ноября 2025.
- ↑ numpy. PyPI. Дата обращения: 2 ноября 2025.
- ↑ PyPy Status Blog: NumPy funding and status update. Дата обращения: 22 декабря 2011. Архивировано 4 августа 2025 года.
- ↑ 1 2 3 4 Frequently Asked Questions — PyPy documentation. The PyPy team. Дата обращения: 2 ноября 2025.
- ↑ GitHub - pypy/numpypy: Obsolete, use pypy's cpyext for numpy. GitHub. Дата обращения: 2 ноября 2025.
- ↑ Why is PyPy Slower for Adding NumPy Arrays? A Deep Dive. Saturn Cloud. Дата обращения: 2 ноября 2025.
- ↑ HPy: A better C API for Python. The HPy Project. Дата обращения: 2 ноября 2025.
- ↑ numpy/numpy: The fundamental package for scientific computing with Python. GitHub. Дата обращения: 3 ноября 2025.
- ↑ NumPy Roadmap. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ NEP 0 — NumPy Enhancement Proposal Template. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ Gordon and Betty Moore Foundation Funds NumPy Improvement. NumFOCUS (18 июля 2017). Дата обращения: 3 ноября 2025.
- ↑ Essential Open Source Software for Science. Chan Zuckerberg Initiative. Дата обращения: 3 ноября 2025.
- ↑ SPEC 4 — Providing Nightly Wheels. Scientific Python. Дата обращения: 3 ноября 2025.
- ↑ numpy/numpy-release: Tools for releasing NumPy. GitHub. Дата обращения: 3 ноября 2025.
- ↑ Building from source — NumPy v2.1.dev0 Manual. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ Depending on NumPy — NumPy v2.1.dev0 Manual. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ Introduction to NumPy. W3Schools. Дата обращения: 3 ноября 2025.
- ↑ Что такое NumPy. Skillfactory. Дата обращения: 3 ноября 2025.
- ↑ NumPy C-API — NumPy v2.1.dev0 Manual. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ SciSharp/Numpy.NET: C# bindings for NumPy. GitHub. Дата обращения: 3 ноября 2025.
- ↑ 1 2 SIMD Optimizations — NumPy v2.0 Manual. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ Сообщество SciPy. NumPy for Matlab users. Дата обращения: 2 февраля 2017. Архивировано 31 декабря 2015 года.
- ↑ NumPy Release Notes. Дата обращения: 1 сентября 2025. Архивировано 11 октября 2025 года.
- ↑ 1 2 Основы NumPy. Часть 1. Создание массивов. PythonWorld. Дата обращения: 3 ноября 2025.
- ↑ 1 2 3 Что такое NumPy и зачем он нужен. Хекслет. Дата обращения: 3 ноября 2025.
- ↑ NumPy C-API — NumPy v2.1 Manual. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ Using NumPy C-API. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ 1 2 NumPy: универсальные функции (ufunc). External Software. Дата обращения: 3 ноября 2025.
- ↑ Введение в NumPy: основы и операции. Habr. Дата обращения: 3 ноября 2025.
- ↑ Francesc Alted. numexpr. GitHub. Дата обращения: 8 марта 2014. Архивировано 26 августа 2025 года.
- ↑ Numba. numba.pydata.org. Дата обращения: 8 марта 2014.
- ↑ Releases · dask/dask. GitHub. Дата обращения: 3 ноября 2025.
- ↑ Changelog — JAX documentation. Google. Дата обращения: 3 ноября 2025.
- ↑ Releases · cupy/cupy. GitHub. Дата обращения: 3 ноября 2025.
- ↑ Using NumPy in TensorFlow. TensorFlow. Дата обращения: 3 ноября 2025.
- ↑ WWDC 2025: Get Started with MLX for Apple Silicon. DEV Community (10 июня 2025). Дата обращения: 3 ноября 2025.
- ↑ GitHub - ml-explore/mlx: MLX: An array framework for Apple silicon. GitHub. Дата обращения: 3 ноября 2025.
- ↑ Чтение и запись файлов с помощью NumPy. External Software. Дата обращения: 3 ноября 2025.
- ↑ numpy.loadtxt — NumPy v1.15 Manual. spec-zone.ru. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Чтение и запись данных массивов в файлы. PythonRu. Дата обращения: 3 ноября 2025.
- ↑ Как сохранить массив numpy? Хекслет. Дата обращения: 3 ноября 2025.
- ↑ Запись массива NumPy в файл CSV. Sky.pro. Дата обращения: 3 ноября 2025.
- ↑ Как сохранить массив NumPy. numpy.ru. Дата обращения: 3 ноября 2025.
- ↑ 1 2 3 Работа с файлами в NumPy. Курс «Python для инженеров и исследователей». Дата обращения: 3 ноября 2025.
- ↑ NumPy - Supported File Formats. TutorialsPoint. Дата обращения: 3 ноября 2025.
- ↑ 1 2 How to IO with NumPy — NumPy User Guide. Runebook.dev. Дата обращения: 3 ноября 2025.
- ↑ NumPy: основные сведения для начинающих — Импорт библиотеки. NumPy Manual. — «После установки NumPy модуль импортируется как: 'import numpy as np'.» Дата обращения: 1 сентября 2025. Архивировано 28 августа 2025 года.
- ↑ Документация по F2PY. NumPy. Дата обращения: 18 апреля 2022. Архивировано 14 июля 2024 года.
- ↑ Worthey, Guy A python vs. Fortran smackdown. Guy Worthey. Guy Worthey (3 января 2022). Дата обращения: 18 апреля 2022. Архивировано 6 января 2022 года.
- ↑ Shell, Scott Writing fast Fortran routines for Python. UCSB Engineering Department. University of California, Santa Barbara. Дата обращения: 18 апреля 2022. Архивировано 12 апреля 2022 года.
- ↑ Using Meson — F2PY Users Guide and Reference Manual. NumPy developers. Дата обращения: 3 ноября 2025.
- ↑ BUG: f2py fails with Meson not found. GitHub. Дата обращения: 3 ноября 2025.
- ↑ NumPy 2.2.0 Release Notes. NumPy developers. Дата обращения: 3 ноября 2025.
Литература
- McKinney, Wes. Python for Data Analysis. — 3rd. — O'Reilly, 2022. — ISBN 978-1098104030.
- Bressert, Eli. Scipy and Numpy: An Overview for Developers.. — O'Reilly, 2012. — ISBN 978-1-4493-0546-8.
- VanderPlas, Jake. Introduction to NumPy // Python Data Science Handbook: Essential Tools for Working with Data. — O'Reilly, 2016. — P. 33–96. — ISBN 978-1-4919-1205-8.
Ссылки
- https://numpy.org/
- https://github.com/numpy/numpy — официальный репозиторий проекта на GitHub
- https://numpy.org/numpy-tutorials/ — учебные материалы по NumPy
- https://scipy.github.io/old-wiki/pages/History_of_SciPy — история развития NumPy