2013-03-25 4 views
5

Каков наилучший способ взять крест-произведение каждой соответствующей строки между двумя массивами? Например: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... 

Я знаю, что это можно сделать с помощью простого цикла питона или с помощью apply_along_axis Numpy, но мне интересно, если есть хороший способ сделать это полностью в пределах базового кода C в NumPy. В настоящее время я использую простой цикл, но это, безусловно, самая медленная часть моего кода (мои фактические массивы составляют десятки тысяч строк).

ответ

5

Возможно, мне удастся удалить этот ответ за несколько минут, когда я осознаю свою ошибку, но разве не очевидна работа?

>>> 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 
+0

Вы правы. Я думал, что попробовал это и имел проблемы, но я просто попробовал это снова сам, и это сработало. В первый раз я должен был сделать что-то не так. Благодарю. –

 Смежные вопросы

  • Нет связанных вопросов^_^