Python/Numpy - перекрестное произведение совпадающих строк в двух массивах
Как лучше всего взять перекрестное произведение каждой соответствующей строки между двумя массивами? Например:
a = 20x3 array
b = 20x3 array
c = 20x3 array = some_cross_function(a, b) where:
c[0] = np.cross(a[0], b[0])
c[1] = np.cross(a[1], b[1])
c[2] = np.cross(a[2], b[2])
...etc...
Я знаю, что это можно сделать с помощью простого цикла Python или с помощью apply_along_axis от numpy, но мне интересно, есть ли какой-нибудь хороший способ сделать это полностью в базовом коде C numpy. В настоящее время я использую простой цикл, но это самая медленная часть моего кода (мои фактические массивы имеют длину в десятки тысяч строк).
1 ответ
Решение
Возможно, мне придется удалить этот ответ через несколько минут, когда я осознаю свою ошибку, но разве не работает очевидная вещь?
>>> a = np.random.random((20,3))
>>> b = np.random.random((20,3))
>>> c = np.cross(a,b)
>>> c[0], np.cross(a[0], b[0])
(array([-0.02469147, 0.52341148, -0.65514102]), array([-0.02469147, 0.52341148, -0.65514102]))
>>> c[1], np.cross(a[1], b[1])
(array([-0.0733347 , -0.32691093, 0.40987079]), array([-0.0733347 , -0.32691093, 0.40987079]))
>>> all((c[i] == np.cross(a[i], b[i])).all() for i in range(len(c)))
True