Python использует каждый элемент в ndarray как параметр для лямбда-функции - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь вычислить векторный базис для любого преобразования в R ^ n -> R ^ m.
Чтобы добиться этого, я написал функции lamba для представления фактической функции.Вот некоторые примеры:

R2 -> R2: g1 = lambda x,y: np.array([2*x+y, x+2*y])
R3 -> R1: g3 = lambda x,y,z: np.array([x, -2*y, 3*z])

Чтобы иметь функцию, выполняющую мою работу, я придумал следующее:

def calculate_Vector_Basis(f, numberOfArgs):
    """
    Calculates the result for every base vector ex, ey, ...
    Params:
        f : function with generic number of arguments
        numberOfArgs: The number of arguments for the generic function
    Returns:
        [] : Array of base vectors
    """

    # Collection of base vectors
    vector_basis = []
    for i in range(numberOfArgs):
        # Create unit vector e with zeros only
        base = np.zeros(numberOfArgs)
        # Set 1 where at the axis required (for R3: x = [1 0 0], y = [0 1 0], z = [0 0 1])
        base[i] = 1
        # Call function f for every unit vector e
        vector_basis.append(f(base[0], base[1]))
    return vector_basis

Функция должна повторяться и создавать единичные векторы в соответствии с размерностью заданнойn-мерная комната рациональных чисел.
Образцы:

R2 = [1 0], [0 1]
R3 = [1 0 0], [0 1 0], [0 0 1]

Я застрял там, где хочу вызвать переданное значение lambda function f.
На основе f'sопределение, мне нужно от 1 до 5 параметров.
Для R2 мне нужно будет позвонить f(base[0], base[1]) в R3, мне нужно будет позвонить f(base[0], base[1], base[2]).base - это ndarray, который выглядит следующим образом [xval, yval, ...].Есть ли возможность вызвать f с every value in the ndarray?

1 Ответ

2 голосов
/ 24 мая 2019

Да, можно сделать это с распаковкой аргумента :

def calculate_Vector_Basis(f, numberOfArgs):
    """
    Calculates the result for every base vector ex, ey, ...
    Params:
        f : function with generic number of arguments
        numberOfArgs: The number of arguments for the generic function
    Returns:
        [] : Array of base vectors
    """

    # Collection of base vectors
    vector_basis = []
    for i in range(numberOfArgs):
        # Create unit vector e with zeros only
        base = np.zeros(numberOfArgs)
        # Set 1 where at the axis required (for R3: x = [1 0 0], y = [0 1 0], z = [0 0 1])
        base[i] = 1
        # Call function f for every unit vector e
        vector_basis.append(f(*base))
    return vector_basis
...