Tôi có một vấn đề đơn giản là tôi đang tìm cách triển khai nhanh trong Matlab. Tôi có một mảng các giá trị, chúng ta hãy nói:Hoạt động với || và && các toán tử phải được chuyển đổi thành các giá trị vô hướng lô-gic
a = floor(rand(5,5).*255)
Sau đó tôi có một mảng ngưỡng kích thước tương tự, giả sử đó là:
a_thresh = floor(rand(5,5).*255)
Đối với các giá trị trong vòng a
nếu họ là 0.5x nhỏ hơn tương ứng giá trị trong a_thresh
tôi muốn đầu ra là 0 - tương tự cho 1.2x giá trị trong a_thresh
cũng cần được thiết lập để không, tức:
a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
Đối với các giá trị giữa 0,4x và 0,5x và 1,0x và 1,2x tôi muốn có một số tiền tỷ lệ và khác giữa 0,5 và 1,0 tôi muốn sử dụng giá trị a
không thay đổi gì. Tôi nghĩ tôi có thể sử dụng giống như sau:
a(a>= a_thresh .* 0.4 && a <a_thresh.* 0.5) = ((a - a_thresh.*0.4)/(a_thresh.*0.5 a_thresh.*0.4)) .* a;
Tuy nhiên, tôi nhận được một lỗi nói rằng:
Phép toán để || và các hoạt động & & phải được chuyển đổi thành giá trị vô hướng hợp lý
Bất kỳ lời khuyên nào về cách giải quyết vấn đề này? Rõ ràng tôi có thể sử dụng vòng lặp để làm điều này và nó sẽ là tầm thường, nhưng tôi muốn giữ mã được vector hóa.
Tuyệt vời - giải quyết vấn đề &/&& - Tôi biết một số cách không biết điều đó, cảm ơn! Bây giờ tôi có một vấn đề nhỏ mà số lượng các yếu tố bên phải là khác nhau từ bên trái. Có một cách thông minh để sửa lỗi này? – trican
@trican Tôi đã làm việc đó, vui lòng xem cập nhật. –
Rất nhiều người, cảm ơn Eitan - giải pháp của bạn hoạt động hoàn hảo - và rõ ràng là đủ chung để tôi có thể thấy cách tôi có thể sử dụng nó ở nơi khác trong công việc Matlab của mình – trican