4

asarray関数の引数に適用するための標準化されたデコレータはありますか?

つまり、私が書くことができる何か:

@array_args  # this decorator automatically calls asarray on arguments
def f(x,y):
     return x/y

それ以外の

def f(x,y):
    (x,y)=(numpy.asarray(x), numpy.asarray(y))
     return x/y

私はこの議論を見つけただけなので、そこにデコレータを引っ張ることができました。ただし、に統合されているバージョンを使用したいと思いnumpyます。

4

2 に答える 2

4

私の知る限り、存在しませんが、それを書くのは非常に簡単です:

from functools import wraps


def array_args(func):
    @wraps(func)
    def wrapper(*args):
        arrays = map(np.asarray, args)
        return func(*arrays)

    return wrapper
于 2013-03-06T19:17:39.750 に答える
1

これが私が最終的に得たものです、

import scipy # numpy could work too
from functools import wraps
def asarray_strictnumeric( obj ):
    ''' only convert if the result is a numerical array. '''
    tmp=scipy.asarray(obj)
    if tmp.dtype.kind in 'iufc':
        return tmp
    else:
        return obj

def array_args(f):
    ''' Decorator: 
        - converts numerical positional arguments to arrays,
        - leaves non-numerical positional arguments alone,
        - leaves all keywords alone.
    '''
    @wraps(f)
    def wrapper(*args, **kwds):
        args=[asarray_strictnumeric(x) for x in args]
        return f( *args, **kwds )
    return wrapper 

しかし、@ promanow の回答は有用な出発点でした。

于 2013-03-06T19:49:52.770 に答える