Поиск продукта Dot без использования np.dot или циклов в Python - PullRequest
0 голосов
/ 20 октября 2018

Мне нужно написать функцию, которая:

принимает два массива NumPy в качестве аргументов, возвращающих одно число: произведение точек с плавающей запятой из двух входных векторов numpy массивов и функции np.sum разрешено, нетnp.dot и без циклов

В своем вступительном классе я много узнал об использовании циклов, когда я не могу использовать простую функцию, такую ​​как np.dot, но эта причина по какой-то причине запутала меня.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Вероятно, считается мошенничеством, но в Python 3.5 добавлен оператор умножения матриц , который numpy использует для вычисления точечного произведения без фактического вызова np.dot:

>>> arr1 = np.array([1,2,3])
>>> arr2 = np.array([3,4,5])
>>> arr1 @ arr2
26

Проблема решена!

0 голосов
/ 20 октября 2018

Ciao,

возможное решение использует рекурсию

import numpy as np

def multiplier (first_vector, second_vector, size, index, total):
    if index < size:
        addendum = first_vector[index]*second_vector[index]
        total = total + addendum
        index = index + 1
        # ongoing job
        if index < size:
            multiplier(first_vector, second_vector, size, index, total)
        # job done
        else:
            print("dot product = " + str(total))

def main():
    a = np.array([1.5, 2, 3.7])
    b = np.array([3, 4.3, 5])
    print(a, b)

    i = 0
    total_sum = 0

    # check needed if the arrays are not hardcoded
    if a.size == b.size:
        multiplier(a, b, a.size, i, total_sum)

    else:
        print("impossible dot product for arrays with different size")

if __name__== "__main__":
    main()
...