Pull to refresh

Comments 39

Вы напомнили мне про NumPy и про то, что я с ней не работал)
Звучит, как воспоминание о боевой подруге.
Соглашусь с тем, что неплох. Я уже описывал его в курсе на Викиверситете, как пример отличной библиотеки для символьных вычислений. Но то, что из одной оперы, то здесь композиторы совсем разные и по большей части для разных вещей. Хотя в SymPy тоже поддерживаются, например, операции с линейной алгеброй.
Да, SymPy удобен для операций с различными уравнениями, системами. А про оперу, я имел ввиду научное направление :) Хотя NumPy вообще много для чего удобен
А еще массивы numpy без шаманства пиклятся и передаются в динамические библиотеки.
Да, например, с помощью ndarray.dump(file).
Если, что то это было утверждение =)
Просто данная функциональность немаловажна при многопоточном счете большого количества данных (например, вычислительная аэродинамика), когда требуется много перекидывать между потокамии и передавать в счетные библиотеки.
Да, это я что-то вроде как кивнул.
Спасибо! А то вроде как простых туториалов для numpy и нет, а в каком-нибудь проекте используешь списки — и все пинают в numpy — да и действительно, он значительно быстрее.
Странно, что такие статьи не особо ценят.

И вот, назрел вопрос: как обрабатываются вещи типа a[1, :, ...] с точки зрения синтаксиса языка?
Точно также. То же самое, что a[1, ...] и что просто a[1]. Легко проверяется в интерактивном режиме. Или в чем вопрос?
Насколько я знаю, такое обращение вызывает магический метод типа __getitem__ или __getslice__. Что же ему передаётся в параметрах?
Исследовал этот вопрос:

In [3]: class X:
...: def __getitem__(self, x):
...: print x
...:
...:

In [4]: X()[1,...]
(1, Ellipsis)
При этом просто многоточие является ошибкой — это видимо синтаксический сахар только для квадратных скобок.
Да. Это спец объект Python под названием Ellipsis.
Хорошая статья. Вот только NumPy это не расширение для языка Python, а модуль для CPython. Как мне его не хватает в PyPy :-(
а позвольте поинтересоваться, каковы причины необходимости именно PyPy?
Эм. Многократное ускорение?

В частности, на raytrace коде он даёт почти десятикратное увеличение скорости работы.
Спасибо, хорошая статья, я для себя даже кое-что новое узнал :)) Ну и за ссылку, данкешон :)
хотелось бы не сухих комментариев к мануалу, а реальных примеров решения классических задач (3d графика, convex hull, voronoi, итп.)
Это прямой перевод пособия, размещенного на сайте. В нем рассматриваются общие вопросы работы с массивами, само название говорит, для чего оно нужно. Более специфическим вопросам будут посвящены другие топики.
scipy/numpy не умеют convex hull. см delaunay package, который всё равно не pure python.

что вы понимаете под '3d графика'?
ну так это обёртка к «канонической» C-шной реализации.
numpy тут вобще ни при чом.
Как это «не причём»?

Вы исходник scipy.spatial.qhull видели, прежде чем хоть какие-то выводы делать?

Если нет — показываю:

Файл: scipy/scipy/spatial/qhull.pyx

import numpy as np
cimport numpy as np
Что-то сомневаюсь, что интерфейс к сишной реализации хорошо иллюстрирует применение numpy в питоне.
Уверен, что неплохо продемонстрирует применение numpy в pyrex'е.

Это я к тому, что numpy тут вообще-то причём.
я имел ввиду именно примеры решения задач с использованием numpy, чтобы, так сказать, наглядно продемонстрировать приемущества использования в этих задачах numpy перед pure python.

в 3d графике используются вектора, а также матричная арифметика (причом в каждой 3д или игровой библиотеке реализованы свои вектора и матрицы, с шахматами и поэтэссами)
Я попробовал взять toy raytracer'ер[1] и заменить в нём их классы Vector и Point на numpy массивы получается обратная ситуация — код замедляется. Это, видимо, связано с тем, что проще перемножить/сложить 3 числа так, чем переходить для этого в C код Numpy. Я глубоко не копал в этом, точно сказать немогу.

При этом, если запустить код под pypy-c-jit, то pure python без Numpy выигрывает в несколько раз по сравнению с кодом с CPython + numpy.

Я прямо сейчас занимаюсь тем, что пишу 3d графику для Python. Правда, задача у меня несколько специфичная.

[1] www.lshift.net/blog/2008/10/29/toy-raytracer-in-python
ну или вообще — для чего нужен этот numpy, в каких задачах его применение оправдано, а в каких нет.
У меня вопрос. я как раз смотрел на эту либу:

Есть вариант такой

объект A, у него есть характеристики ( Цвет: Зеленый, размер: 10, вес: 100, противоводный: ДА )
объект B, у него есть характеристики ( Цвет: Красный, размер: 10, вес: 90, противоводный: НЕТ )
объект C, у него есть характеристики ( Цвет: Зеленый, размер: 10, вес: 100, противоводный: ДА )
объект D, у него есть характеристики ( размер: 10, вес: 100, противоводный: ДА, Скидка: ДА )

Нужно если например На входе фуннкции объект A, построить объекты в таком виде

объект C
объект B
объект D
т.е. объект С наиболее схож с объектом А и так далее.

Как я понимаю эту задачу я могу решить с этой либой ( п.с. размер: 10, вес: 100 — канечно это все будет идентификаторы, типа prp_id = 1( свойство размер), p2w_id= 2( значения свойства размер = 10),
prp_id = 2( свойство вес), p2w_id= 3( значения свойства размер = 100) )

) буду раз если Камрады помогут решить эту задачу.

Сейчас это все делаеться обходом цыкла, но хочеться красоты и прочего)

Ну и вторая задача выходит из этого

на входе: Цвет: Зеленый, размер: 10, вес: 100, на выходе все тот же список объектов, наиболее релевантные по входным параметрам.
Скажите пожалуйста, а можно ли выбирать конкретные столбцы в массиве?
Например, имея массив
array([[ 7., 5., 9., 3.], [ 7., 2., 7., 8.], [ 6., 8., 3., 2.]])
я хочу выбрать первый и 4й столбцы, чтобы получить
array([[ 7., 3.], [ 7., 8.], [ 6., 2.]])
Можно ли это сделать просто что-то типа array[:,0::4]?
случаем обычный питоний zip в np не перегружен ли?
лучше поздно, чем никогда, может кому-то пригодится

import numpy as np

a = np.array([[7., 5., 9., 3.],
              [7., 2., 7., 8.],
              [6., 8., 3., 2.]])

print(a[:, [0, 3]])


[[ 7. 3.] [ 7. 8.] [ 6. 2.]]
Отличный мануал, спасибо!

Только видимо что-то отъехало в хабре — html-код в примерах какой-то полез.
Да, исходно все было в порядке.
Все бы хорошо, если бы не поехавшая верстка (
Sign up to leave a comment.

Articles