[Numpy-discussion] matlab vs. python question
Sturla Molden
sturla at molden.no
Thu Apr 26 08:35:02 EDT 2007
On 4/26/2007 2:19 PM, Steve Lianoglou wrote:
>> Beside proper programing paradigm Python easily scales to large-
>> scale number crunching: You can run large-matrices calculations
>> with about 1/2 to 1/4 of memory consumption comparing to Matlab.
>
> Is that really true? (The large-matrix number crunching, not the
> proper programming paradigm ;-)
>
> By no scientific means of evaluation, I was under the impression that
> the opposite was true to a smaller degree.
Matlab have pass-by-value semantics, so you have to copy your data in
and copy your data out for every function call. You can achieve the same
result in Python by pickling and unpickling arguments and return values,
e.g. using this function decorator:
import cPickle as pickle
def Matlab_Semantics(f):
'''
Emulates Matlab's pass-by-value semantics,
objects are serialized in and serialized out.
Example: @Matlab_Semantics
def foo(bar):
pass
'''
func = f
return wrapper
def wrapper(*args,**kwargs):
args_in = pickle.loads(pickle.dumps(args))
kwargs_in = {}
for k in kwargs:
kwargs_in[k] = pickle.loads(pickle.dumps(kwargs[k]))
args_out = func(*args_in,**kwargs_in)
args_out = pickle.loads(pickle.dumps(args_out))
return args_out
Imagine using this horrible semantics in several layers of function
calls. That is exactly what Matlab does. Granted, Matlab optimizes
function calls by using copy-on-write, so it will be efficient in some
cases, excessive cycles og copy-in and copy-out is usually what you get.
Sturla Molden
More information about the NumPy-Discussion
mailing list