2012-02-16 59 views
13

Có nhiều phương pháp khác nhau để tính toán khoảng cách giữa hai vectơ cùng chiều dài: Euclide, Manhattan, Hamming ...Tính khoảng cách giữa hai vectơ có độ dài khác nhau

Tôi đang tự hỏi về bất kỳ phương pháp mà sẽ tính toán khoảng cách giữa vectơ có độ dài khác nhau.

+0

Vectơ của bạn chứa gì? (Bits, nổi, ...)? Bạn không thể điền chúng với 0 và áp dụng một trong những khoảng cách cùng chiều dài vectơ? – Scharron

+0

@Scharron, tôi nghĩ rằng bạn đang bối rối kích thước của một vector với chiều dài (chuẩn) của một vectơ. OP đã không đề cập đến bất cứ nơi nào mà số lượng các thành phần trong một vector khác với số lượng các thành phần trong một vector khác. – ardnew

+3

@ardnew Bạn đúng trong toán học thuần túy. Nhưng cách câu hỏi được thể hiện, tôi cho rằng ông đã nói về chiều dài "khoa học máy tính", có nghĩa là số lượng các phần tử trong một vectơ. Khác, ông sẽ không có vấn đề tính toán khoảng cách của các vectơ có độ dài khác nhau. – Scharron

Trả lời

6

Công thức khoảng cách Euclide tìm khoảng cách giữa hai điểm bất kỳ trong không gian Euclide.

Một điểm trong không gian Euclide còn được gọi là véc tơ Euclide.

Bạn có thể sử dụng công thức khoảng cách Euclide để tính khoảng cách giữa các vectơ có hai độ dài khác nhau.

Đối với các vectơ có kích thước khác nhau, nguyên tắc tương tự cũng được áp dụng.

Giả sử một vectơ có kích thước thấp hơn cũng tồn tại trong không gian chiều cao hơn. Sau đó, bạn có thể đặt tất cả các thành phần bị thiếu trong vector chiều thấp xuống 0 sao cho cả hai vectơ có cùng kích thước. Sau đó, bạn sẽ sử dụng bất kỳ công thức khoảng cách đã đề cập nào để tính toán khoảng cách.

Ví dụ, hãy xem xét một vector 2 chiều A trong với các thành phần (a1,a2), và một vector 3 chiều B trong với các thành phần (b1,b2,b3).

Để thể hiện A trong , bạn sẽ đặt thành phần của nó thành (a1,a2,0). Sau đó, Euclide khoảng cách d giữa AB thể được tìm thấy bằng cách sử dụng công thức:

d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)² 

d = sqrt((b1 - a1)² + (b2 - a2)² + b3²) 

Đối với trường hợp cụ thể của bạn, các thành phần sẽ là một trong hai 0 hoặc 1, vì vậy tất cả những khác biệt sẽ -1, 0, hoặc 1. Sau đó, các khác biệt bình phương sẽ chỉ là 0 hoặc 1.

Nếu bạn đang sử dụng số nguyên hoặc bit cá nhân để đại diện cho các thành phần, bạn có thể sử dụng các hoạt động Bitwise đơn giản thay vì một số số học (^ nghĩa XOR hoặc exclusive or):

d = sqrt(b1^a1 + b2^a2 + ... + b(n-1)^a(n-1) + b(n)^a(n)) 

Và chúng ta đang giả định dấu thành phần của A0, vì vậy công thức cuối cùng sẽ là:

d = sqrt(b1^a1 + b2^a2 + ... + b(n-1) + b(n)) 
+0

Ban đầu, điều đó có ý nghĩa. Nhưng bây giờ, sau khi suy nghĩ một lúc, để đặt giá trị còn thiếu của tham số bị thiếu về 0, có thể gây ra vấn đề, nếu bạn sử dụng Euclide để tính toán khớp dấu vân tay để định vị. Trong ví dụ của bạn ...tưởng tượng vectơ A chứa (0,0) và vektor B chứa (0,0,0) VÀ Vektor C chứa (0,0,0), so với Euclide sẽ dẫn đến phép tính khoảng cách bằng không, cho cả hai khoảng cách . Nhưng A còn xa hơn B so với C. – JacksOnF1re

+0

@ JacksOnF1re im không chắc chắn tôi làm theo. trong ví dụ của bạn, tại sao khoảng cách từ A đến B khác với khoảng cách từ B đến C? – ardnew

+0

Giải thích của tôi hơi nghèo một chút. Ý tôi là, nếu bạn tính toán khoảng cách với euclide, khoảng cách giữa A và B giống như B và C. Nhưng đó là vấn đề! A đến B phải trả về khoảng cách cao hơn, vì kích thước còn thiếu. Điều đó có thể gây ra vấn đề (tôi đoán), nếu nói đến tính toán cho nội địa hóa. toán học chính xác, nhưng hạn chế hữu ích cho các vấn đề lập trình. Xin lỗi vì tiếng Anh của tôi. – JacksOnF1re

0

Bạn có thể thử để tính toán khoảng cách tối thiểu trung bình giữa hai vectơ p và q của kích thước n và m (n ~ = m):

d = 1/n * sum_i=1:n (min_j=1:m (p(i) - q(j))) + 1/m * sum_j=1:m (min_i=1:n (p(i) - q(j))) 
0

Bạn không thể trực tiếp tính toán khoảng cách giữa các vectơ có độ dài khác nhau.

Tất cả các đề xuất ở đây bắt đầu bằng một hàm ánh xạ vectơ có độ dài thấp hơn đến độ dài lớn hơn, sau đó thực hiện phép tính như bình thường.

Có rất nhiều, nhiều chức năng (vô cùng nhiều, trên thực tế) mà người ta có thể sử dụng:

  • Điền với zero. Đó là điều dễ nhất để làm. Giả sử, nếu bạn có một chiếc xe hơi và cần tính toán khoảng cách của nó với một chiếc máy bay, điều này đặt chiếc xe ở mực nước biển.
  • Tra cứu giá trị bị thiếu ở đâu đó. Với ví dụ về máy bay, bạn sẽ kích hoạt cơ sở dữ liệu địa lý của mình và tra cứu độ cao từ kinh độ/vĩ độ.
  • Sử dụng một số chức năng toán học.

Do kết quả tính toán khoảng cách phụ thuộc rất lớn vào chức năng chuyển đổi vectơ ngắn hơn thành dài hơn, mọi người cần phải rõ ràng về chức năng nào được sử dụng. Hoặc vì mọi người trong các trường đồng ý rằng chỉ có một hàm có ý nghĩa, hoặc vì hàm được sử dụng trong chuyển đổi được ghi lại.

0

Ý tưởng đệm mảng có kích cỡ ngắn với số 0 để có cùng độ dài như mảng có kích thước dài dường như không "thường" là ý tưởng chính xác. Ví dụ, nếu chúng ta có hai bộ (mảng, vec-tơ, ...) của các phép đo cho cùng một tham số (ví dụ nhiệt độ, tốc độ hoặc tham số nhị phân như trạng thái của công tắc bật/tắt) được thực hiện tại thời điểm khác nhau instants. Giả sử rằng tập A1 đầu tiên bao gồm các phép đo N được thực hiện tại một tập hợp các bản sao T1 trong khi tập hợp A2 thứ hai bao gồm các phép đo M (M ~ = N) được lấy tại một tập các phiên bản T2.

Xin lưu ý rằng sự phân bố T2 tùy ý khác với T1. Vì vậy, đệm với số không ở đây không có ý nghĩa.

Trong trường hợp này, tôi đề nghị sử dụng nội suy bằng cách sử dụng một tập hợp chung của khoảnh khắc thời gian, nói T như sau:

A1_new = Nội suy (T1, A1, T);

A2_new = nội suy (T2, A2, T);

trong đó nội suy (x, y, xq) chấp nhận đầu vào là biến x, hàm y (x) và điểm truy vấn xq. Hàm 'nội suy' trả về kết quả đầu ra nội suy y (xq).

Bây giờ, chúng tôi có thể so sánh các bộ có cùng kích thước A1_new và A2_new với bất kỳ biện pháp phù hợp nào, ví dụ: Euclide khoảng cách.

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