2016-09-21 12 views
5

Tôi đang cố gắng chạy mã này và các sản phẩm 2 chấm cuối cùng hiển thị lỗi như được đề xuất trong nhóm. Tôi đã kiểm tra kích thước của ma trận và cả hai đều là (3, 1), vậy tại sao nó lại hiển thị cho tôi một lỗi trong khi làm sản phẩm chấm?Hiển thị ValueError: hình dạng (1,3) và (1,3) không căn chỉnh: 3 (mờ 1)! = 1 (mờ 0)

coordinate1 = [-7.173, -2.314, 2.811] 
coordinate2 = [-5.204, -3.598, 3.323] 
coordinate3 = [-3.922, -3.881, 4.044] 
coordinate4 = [-2.734, -3.794, 3.085] 

import numpy as np 
from numpy import matrix 
coordinate1i=matrix(coordinate1) 
coordinate2i=matrix(coordinate2) 
coordinate3i=matrix(coordinate3) 
coordinate4i=matrix(coordinate4) 

b0 = coordinate1i - coordinate2i 
b1 = coordinate3i - coordinate2i 
b2 = coordinate4i - coordinate3i 

n1 = np.cross(b0, b1) 
n2 = np.cross(b2, b1) 

n12cross = np.cross(n1,n2) 
x1= np.cross(n1,b1)/np.linalg.norm(b1) 
print np.shape(x1) 
print np.shape(n2) 
np.asarray(x1) 
np.asarray(n2) 

y = np.dot(x1,n2) 
x = np.dot(n1,n2) 

return np.degrees(np.arctan2(y, x)) 

Trả lời

7

Bằng cách chuyển đổi ma trận để mảng bằng cách sử dụng

n12 = np.squeeze(np.asarray(n2)) 

X12 = np.squeeze(np.asarray(x1)) 

giải quyết vấn đề này.

3

Không giống như số học chuẩn, mà mong muốn kích thước phù hợp, chấm sản phẩm đòi hỏi rằng các kích thước là một trong những:

  • (X..., A, B) dot (Y..., B, C) -> (X..., Y..., A, C), nơi ... có nghĩa là "0 hoặc giá trị khác nhau hơn
  • (B,) dot (B, C) -> (C,)
  • (A, B) dot (B,) -> (A,)
  • (B,) dot (B,) ->()

Vấn đề của bạn là bạn đang sử dụng np.matrix, điều này hoàn toàn không cần thiết trong mã của bạn - mục đích chính của np.matrix là dịch a * b thành np.dot(a, b). Theo nguyên tắc chung, np.matrix có lẽ không phải là một lựa chọn tốt.

0
numpy.dot(a, b, out=None) 

Sản phẩm chấm của hai mảng.

Đối với thứ nguyên N, nó là sản phẩm tổng trên trục cuối cùng của a và thứ hai-to-cuối cùng của b.

Tài liệu: numpy.dot.

4

Cột của ma trận đầu tiên và hàng của ma trận thứ hai cần được bình đẳng và trật tự nên như thế này chỉ

column of first matrix = row of second matrix 

và không làm theo các bước dưới đây

row of first matrix = column of second matrix 

nó sẽ ném một lỗi

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