2013-03-25 28 views
5

Cách tốt nhất để lấy sản phẩm chéo của mỗi hàng tương ứng giữa hai mảng là gì? Ví dụ:Python/Numpy - Sản phẩm chéo của hàng phù hợp trong hai mảng

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... 

Tôi biết điều này có thể được thực hiện với một vòng lặp python đơn giản hoặc sử dụng apply_along_axis NumPy, nhưng tôi đang tự hỏi nếu có bất kỳ cách tốt để làm điều này hoàn toàn bên trong mã C cơ bản của NumPy. Tôi hiện đang sử dụng một vòng lặp đơn giản, nhưng điều này là bởi đến nay một phần chậm nhất của mã của tôi (mảng thực tế của tôi là hàng chục ngàn hàng dài).

Trả lời

5

Tôi có lẽ sẽ phải xóa câu trả lời này sau một vài phút khi tôi nhận ra sai lầm của mình, nhưng điều này không rõ ràng?

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

Bạn nói đúng. Tôi nghĩ rằng tôi đã thử điều này và đã có vấn đề, nhưng tôi chỉ thử nó một lần nữa bản thân mình và nó đã làm việc. Tôi phải làm điều gì sai lần đầu tiên. Cảm ơn. –

Các vấn đề liên quan