Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2011 17:29:01

math.beginer
От:
Зарегистрирован: 2011-03-28
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

процедура обработки матрицы

Нужно обработку элементов матрицы вынести в отдельную процедуру. Ну например, пусть феункция обнуляет элементы матрицы. Простой код функции, наверное, имеет такой вид

def g(a):
... n=len(a)
... return zeros((n,n))

a=g(a)
Как в этом коде происходит передача данных Как в cpp, через стек? Если да, то это не рационально, и нужно писать процедуру, в которой матрица передается как аргумент процедуры по ссылке. Попробовал, но явно неуспешно :-) :
>>> from numpy import *
>>> def f(a):
... n=len(a)
... a=zeros((n,n))
...
>>> a=ones((5,5))
>>> f(a)
>>> a
array([[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])
Посоветуйте как правльно написать процедуру/функцию заполняющую матрицу не тратя зря ресурсы?



Офлайн

#2 Май 17, 2011 18:53:42

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

процедура обработки матрицы

Офлайн

#3 Май 17, 2011 19:50:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

процедура обработки матрицы

zeros - создание новой матрицы, вам надо a(:,: )=0



Отредактировано (Май 17, 2011 19:50:51)

Офлайн

#4 Май 17, 2011 20:51:00

math.beginer
От:
Зарегистрирован: 2011-03-28
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

процедура обработки матрицы

doza_and
zeros - создание новой матрицы, вам надо a(:,: )=0
у меня в скрипте есть такой код:
def big_matrix_maker(bRow,bCol):
ni=len(bRow)
nj=len(bCol)
for i in range(ni):
....
for j in range(nj):
.....
A[i][j]=....
return A
считаю его не эффективным. Заменить матричными операциями мз numpy не могу, может пока не могу, т.к. на месте многоточий еще много кода с управляющими операторами. Нужно все это ускорить? Как правильно это сдулать в Питон? Есть ли доходчивое объяснение того как устроены функции numpy и быстро работают?



Офлайн

#5 Май 17, 2011 23:38:54

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

процедура обработки матрицы

A=…. это совсем не тоже самое что a=0 в одном случае питон перебирает элементы а в другом это делается внутри библиотеки Numpy. В нем оптимизация сводится часто сводится к векторизации т.е.

for i in range(n):
x[i]=y[i]*z[i]
много хуже чем
x=y*z
Надо чтобы быстро считалось - пишите на c



Отредактировано (Май 17, 2011 23:41:58)

Офлайн

#6 Май 18, 2011 02:24:47

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

процедура обработки матрицы

прикрутите psyco, будет быстрее

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version