Ask Your Question

Warning against a deprecated function

asked 2020-05-27 11:33:48 +0200

Cyrille gravatar image

When programming the following code

def varelmat(M) :
    return sum((vector(M)).apply_map((x-(sum(vector(M)))/len(vector(M)))^2))/len(vector(M))

and applying it

B= random_matrix(QQ, 7,7)

I end with the following warning

`/opt/sagemath-9.0/local/lib/python3.7/site-packages/sage/repl/ipython_kernel/ DeprecationWarning: Substitution using function-call syntax and unnamed arguments is deprecated and will be removed from a future release of Sage; you can use named arguments instead, like EXPR(x=..., y=...) See for details. IPKernelApp.launch_instance(kernel_class=SageKernel'

Could some one explain me how to keep my code save ?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2020-05-27 11:42:53 +0200

rburing gravatar image

updated 2020-05-27 20:07:37 +0200

You are implicitly treating the expression (x-(sum(vector(M)))/len(vector(M)))^2 as a function.

You should be more explicit about it, e.g. replacing it by lambda x: (x-(sum(vector(M)))/len(vector(M)))^2.

Note that it would be more efficient to compute (sum(vector(M)))/len(vector(M)) once instead of doing it anew every time.

To be explicit:

def varelmat(M) :
    return sum((vector(M)).apply_map(lambda x: (x-(sum(vector(M)))/len(vector(M)))^2))/len(vector(M))

or, alternatively e.g.

def varelmat2(M):
    avg = sum(M.list())/len(M.list())
    return vector(M - avg*ones_matrix(M.base_ring(),M.nrows(), M.ncols())).norm(2)^2 / len(M.list())
edit flag offensive delete link more


rburing sorry for my incompetence but I do not knwo how to use the lambda function in that case.

Cyrille gravatar imageCyrille ( 2020-05-27 16:25:55 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2020-05-27 11:33:48 +0200

Seen: 100 times

Last updated: May 27 '20