Nếu bạn chỉ muốn loại bỏ các số không, rời khỏi phi số không đằng sau trong một, sau đó là giải pháp tốt nhất là
a(a==0) = [];
này sẽ xoá zero yếu tố, sử dụng một cách tiếp cận lập chỉ mục logic trong MATLAB. Khi chỉ mục đến một vec-tơ là một vectơ boolean có cùng độ dài với vectơ, thì MATLAB có thể sử dụng kết quả boolean đó để lập chỉ mục nó. Vì vậy, điều này tương đương với
a(find(a==0)) = [];
Và khi bạn đặt một số thành phần mảng thành [] trong MATLAB, quy ước là xóa chúng.
Nếu bạn muốn đặt số không vào một kết quả mới b, trong khi để lại một không thay đổi, cách tốt nhất có lẽ là
b = a(a ~= 0);
Một lần nữa, lập chỉ mục logic được sử dụng ở đây. Bạn có thể sử dụng phiên bản tương đương (về kết quả) của
b = a(find(a ~= 0));
nhưng mlint sẽ kết thúc suy giảm dòng là một nơi chỉ số hoàn toàn logic là hiệu quả hơn, và do đó thích hợp hơn.
Như mọi khi, hãy cẩn thận kiểm tra CHÍNH XÁC về số không hoặc cho bất kỳ số nào, nếu bạn đã chấp nhận các phần tử nằm trong một số dung sai epsilon bằng không. Những thử nghiệm như thế này
b = a(abs(a) >= tol);
Chỉ giữ lại những thành phần này ít nhất là dung sai của bạn.
Nguồn
2010-04-14 09:22:29
hoặc ví dụ đầu tiên, 'a = a (a ~ = 0)' là đủ, việc gán tại chỗ hoạt động tốt. Điểm tốt về thử nghiệm đối với một số nhỏ thay vì 0. – mtrw
@ woodchips: Chỉ cần đăng một so sánh hiệu suất bên dưới :) – tim