Comments 26
Спасибо большое за перевод! Хоть и не совсем новичок в numpy — почитал с удовольствием.
Не знаю, как зайдёт новичкам — а мне прям освежило память)
Маленькие ремарки, которые я бы добавил:
Если новичок шёл последовательно по статье и импортировал numpy через классическое
import numpy as np — возникнет ошибка, не указана библиотека импортирования — np.array() — это единственный момент такой в статье.
Транспонировать матрицу можно и простым a.T — лаконичнее намного)
В остальном — отлично.
П.с.: может стоит подумать, как concatenate более по-русски перевести.
Буду ждать следующих статей!
Не знаю, как зайдёт новичкам — а мне прям освежило память)
Маленькие ремарки, которые я бы добавил:
Заполнение массива одинаковым значением.
>>> a = array([1, 2, 3], float)
Если новичок шёл последовательно по статье и импортировал numpy через классическое
import numpy as np — возникнет ошибка, не указана библиотека импортирования — np.array() — это единственный момент такой в статье.
Транспонировать матрицу можно и простым a.T — лаконичнее намного)
В остальном — отлично.
П.с.: может стоит подумать, как concatenate более по-русски перевести.
Буду ждать следующих статей!
Благодарю за позитивный отзыв. :)
Можно так и перевести: «конкатенация». Это распространённый и признанный термин даже в русскоязычной среде. Эдак и дезъюнкцию с конъюнкцией переводить, что ли?
Кстати, давным давно в институте нам пытались привить русский перевод как «сцепить», «сцепка», но… не /зашло, знаете ли.
Кстати, давным давно в институте нам пытались привить русский перевод как «сцепить», «сцепка», но… не /зашло, знаете ли.
UFO just landed and posted this here
Мне думается, что NumPy — это типа аббревиатуры от Number (Numerical) и Python, поэтому говорить но «numpy» для PHP не совсем корректно, тем более я так понимаю у numpy и numphp разные создатели и вообще не вижу пересечений.
UPD. А, вижу, вы и есть автор и вдохновлялись numpy, это многое объясняет :D
UPD. А, вижу, вы и есть автор и вдохновлялись numpy, это многое объясняет :D
А существует ли аналог numpy для C#?
Если нужна библиотека общего назначения для работы с матрицами — Math.NET Numerics. Она может использовать для расчётов высокопроизводительную библиотеку Intel MKL. По функционалу близка к BLAS/LAPACK.
Обратите внимание, метод reshape создает новый массив, а не модифицирует оригинальный.
Это не совсем так. Если есть возможность (а это обычно именно так) создается новый view в те же самые данные. Ну то есть numpy-объект (мета-данные) действительно создается новый («старый массив не изменился»), но вот указывает он на тот же массив данных, копирования не происходит. Если изменить данные в одном из подобных view, то изменится и содержимое всех остальных view.
Можно кроме того явно потребовать reshape который будет in-place и гарантированно ничего не скопирует. Для этого достаточно просто присвоить новое значение аттрибуту .shape:
a.shape = (5,2)
Эти операции иногда полезны для сохранения большого количества данных в файлах
Для операций с файлами есть ndarray.save / ndarray.savez и ndarray.load а также .tofile / .fromfile — их и следует использовать. Для human-readable вариантов есть ndarray.savetxt и ndarray.loadtxt. Все эти методы гораздо полезнее и чаще используются чем .tostring. Кроме того .tostring вообще устарел, вместо него следует использовать .tobytes
Спасибо за статью. Единственное, чего мне в ней не хватает — это упоминания о type coercion в numpy-списках.
Поправьте, numpy.reshape возвращает view на массив если это возможно, а не копию. Этим как раз активно пользуются — без копирования менять представление данных для разных задач
Мне представляется что самое главное в numpy — возможность избежать медленного перебора элементов массива для выполнения операции над ним. За счет этого достигается скорость.
Также хорошо было отобразить тему numpy array vs python list. Именно ради numpy я познакомился с Питоном, и уже после массивов питоновские списки начали выглядеть алогичными )
Также хорошо было отобразить тему numpy array vs python list. Именно ради numpy я познакомился с Питоном, и уже после массивов питоновские списки начали выглядеть алогичными )
С перебором элементов массива в numpy все забавно. Итерация по numpy-массиву работает часто медленнее чем если этот массив вначале преобразовать в список а затем итерировать список
Причина этого в том что при итерации по массиву надо создавать новые объекты row а при итерации по списку питон просто идет по уже лежащим в списке элементам. Создание же row-ов пачкой в методе .tolist() происходит сильно быстрее чем создании row-ов по одному при итерации :)
for row in my_data:
do_smthing(row) # slow
for row in my_data.tolist():
do_smthing(row) # faster !!!
Причина этого в том что при итерации по массиву надо создавать новые объекты row а при итерации по списку питон просто идет по уже лежащим в списке элементам. Создание же row-ов пачкой в методе .tolist() происходит сильно быстрее чем создании row-ов по одному при итерации :)
Самое главное в numpy — это многомерные массивы и векторизованные математические операции над ними. В numpy чаще всего вы оперируете массивами, а не отдельными элементами. Часто циклы писать не надо вообще. :)
Раз уж тут кидают идеи автору статьи, то ловите еще одну: напишите про pandas.
Это очень классный фреймворк для работы со структурированными данными (таблицами) который шикарно интегрирован с numpy. Для обработки реальных данных в numpy он колоссально облегчает жизнь.
Это очень классный фреймворк для работы со структурированными данными (таблицами) который шикарно интегрирован с numpy. Для обработки реальных данных в numpy он колоссально облегчает жизнь.
Python(x,y) старенький уже.
Спасибо за статью, но несколько уточнений по терминологии:
в том контексте как оно указано, здесь `shape` — это свойство (property), а не метод. Метод — это то, что вызывается со скобками: a.reshape((5, 2))
`in` — это не метод, а оператор.
использовать «from XXX import *» просто опасно.
Метод shape возвращает количество строк и столбцов в матрице:
>>> a.shape
в том контексте как оно указано, здесь `shape` — это свойство (property), а не метод. Метод — это то, что вызывается со скобками: a.reshape((5, 2))
Метод in используется для проверки на наличие элемента в массиве:
>>> 2 in a
`in` — это не метод, а оператор.
>>> from numpy import *
Однако, этот вариант не приветствуется в программировании на python, так как убирает некоторые полезные структуры, которые модуль предоставляет
использовать «from XXX import *» просто опасно.
Sign up to leave a comment.
NumPy в Python. Часть 1