Найти - Пользователи
Полная версия: процедура обработки матрицы
Начало » Python для новичков » процедура обработки матрицы
1
math.beginer
Нужно обработку элементов матрицы вынести в отдельную процедуру. Ну например, пусть феункция обнуляет элементы матрицы. Простой код функции, наверное, имеет такой вид
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.]])
Посоветуйте как правльно написать процедуру/функцию заполняющую матрицу не тратя зря ресурсы?
o7412369815963
в функцию передается ссылка
doza_and
zeros - создание новой матрицы, вам надо a(:,: )=0
math.beginer
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 и быстро работают?
doza_and
A=…. это совсем не тоже самое что a=0 в одном случае питон перебирает элементы а в другом это делается внутри библиотеки Numpy. В нем оптимизация сводится часто сводится к векторизации т.е.
for i in range(n):
x[i]=y[i]*z[i]
много хуже чем
x=y*z
Надо чтобы быстро считалось - пишите на c
o7412369815963
прикрутите psyco, будет быстрее
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB