Trong MATLAB các for
vòng lặp sau:Vòng lặp for không lặp
for i = [1:100]'
%'// Do something, such as disp(i)
end
là không rõ ràng thực sự được thực hiện bởi lặp, thay i
trở thành ma trận [1 2 3 ... 100] và " vòng lặp "chỉ được thực thi một lần trên ma trận này i
. Bạn có thể xác minh điều này bằng cách in giá trị i
hoặc thông tin theo dõi khác. Chỉ có một đường chuyền duy nhất được thực hiện thông qua vòng lặp.
Có thể buộc MATLAB thực hiện vòng lặp chính hãng không? Lý do tôi hỏi là cách tiếp cận trên là tốt cho nhiều trường hợp nhưng đau đớn hơn nhiều khi bạn có vòng lặp lồng nhau cần chạy.
Ví dụ:
Đoạn mã dưới đây sẽ không làm những gì bạn mong đợi nếu bạn nghĩ rằng bạn đã nhận được lặp đi lặp lại thực tế hơn một vòng lặp:
for i = outlier
data(i) = median(data(i-100:i+100))
end
Một mong chờ ở mỗi chỉ số outlier này sẽ thay thế dữ liệu (i) với trung bình dữ liệu từ i-100 đến i + 100, nhưng không. Trong thực tế, trung bình trả về một giá trị được tính trên một tập hợp của tất cả các phạm vi mà bạn quan tâm và mọi điểm dữ liệu (i) được thay thế bằng giá trị đơn đó.
Bạn có thể gửi ra rằng tái tạo những gì bạn đang nhìn thấy. Tôi đã không nhìn thấy hành vi này, và tôi đã rất quan tâm đến các vòng lặp trong Matlab. – Iterator
Bạn không có nghĩa là 'trung bình (dữ liệu (i-100: i + 100))'? (với một ':') –
@Clement J. Vâng tôi có. Đã sửa ngay. –