2011-11-11 51 views

Trả lời

4

Làm thế nào về min(abs(data - b))?

+8

Đừng quên abs ... – madth3

9

nếu dữ liệu được sắp xếp, bạn có thể sử dụng tìm:

i_lower = find(data <= b,1,'last'); 
i_higher = find(data >= b,1,'first'); 

lower_than_b = data(i_lower) 
higher_than_b = data(i_higher) 
20

Đây là một phương pháp khác. Các vector data không cần phải được sắp xếp và b có thể là số dương hoặc âm.

[~,I] = min(abs(data-b)); 
c = data(I); 
0
data = [1 1.2 1.3 1.5 1.8] 

b = 1.23 

find(abs(data-b)==min(abs(data-b))) 
+1

Điều này không thêm bất cứ điều gì nhiều hơn những gì đã được đặt trong bài đăng này làm câu trả lời. – rayryeng

1

Phương pháp này khái quát câu trả lời Doubt để trường hợp có nhiều yếu tố trong b mà bạn đang tìm kiếm:

ind=knnsearch(data',b) c=data(ind)

mà trả về chỉ mục (hoặc mảng của chỉ số) , ind, của phần tử hoặc phần tử gần nhất trong data đến các phần tử được liệt kê trong b.

Lưu ý rằng dữ liệu được chuyển đổi vì tập hợp cần tìm kiếm cần phải là vectơ cột. Nếu có nhiều phần tử thì nó cũng phải là một vectơ cột.

Ngoài ra, phương pháp này có thể được tổng quát hóa để cung cấp cho hàng xóm thứ 2, thứ 3, thứ 4 ... gần nhất (xem tài liệu).

Nó cũng tổng quát hóa trường hợp khi dữ liệu có chiều cao hơn (Nếu kích thước d thì testb sẽ có d cột).

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