2013-10-09 24 views
5

Các nhân ma trận mặc định được tính nhưNumPy nhân ma trận với tùy chỉnh dot sản phẩm

c[i,j] = sum(a[i,k] * b[k,j]) 

Tôi đang cố gắng sử dụng một công thức tùy chỉnh thay vì các sản phẩm chấm để có được

c[i,j] = sum(a[i,k] == b[k,j]) 

Có một hiệu quả cách để làm điều này trong numpy?

Trả lời

4

Bạn có thể sử dụng phát sóng:

c = sum(a[...,np.newaxis]*b[np.newaxis,...],axis=1) # == np.dot(a,b) 

c = sum(a[...,np.newaxis]==b[np.newaxis,...],axis=1) 

tôi bao gồm các newaxis trong b chỉ làm cho nó rõ ràng như thế nào mảng được mở rộng. Có nhiều cách khác để thêm kích thước vào mảng (định hình lại, lặp lại, v.v.), nhưng hiệu quả là như nhau. Mở rộng ab cho cùng một hình dạng để làm phần tử theo yếu tố nhân (hoặc ==), sau đó tổng hợp trên trục chính xác.

+0

+1 đẹp, cảm ơn –

+0

Cảm ơn bạn. Điều này rất gọn gàng. –

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