Tôi đã data = [1 1.2 1.3 1.5 1.8]
Làm cách nào để tìm các giá trị gần với một giá trị nhất định?
Tôi muốn tìm giá trị gần nhất trước và sau khi từ dữ liệu cho thời điểm này, b = 1.23
Làm thế nào để làm điều này?
Tôi đã data = [1 1.2 1.3 1.5 1.8]
Làm cách nào để tìm các giá trị gần với một giá trị nhất định?
Tôi muốn tìm giá trị gần nhất trước và sau khi từ dữ liệu cho thời điểm này, b = 1.23
Làm thế nào để làm điều này?
Làm thế nào về min(abs(data - b))
?
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)
Đâ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);
data = [1 1.2 1.3 1.5 1.8]
b = 1.23
find(abs(data-b)==min(abs(data-b)))
Đ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
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ì test
và b
sẽ có d
cột).
Đừng quên abs ... – madth3