2012-07-12 24 views
14

Tôi muốn ghép một vec-tơ vào một cuộc gọi hàm, nhưng tôi không thể tìm thấy cách để thực hiện việc này. Có thể không?Matlab --- vector ghép vào các đối số cho cuộc gọi hàm

Để mở rộng ý tôi, giả sử chúng ta có vector x dài n và hàm f có các đối số n. Tôi muốn có thể gọi số f(x(1), x(2), ..., x(n)) bằng cách gọi một số thứ như f(x) hoặc f(splice(x)). Nếu x là một mảng ô thay vì vectơ, gọi f(x{:}) sẽ nhận được kết quả mong muốn; nó chỉ có vẻ hợp lý rằng sẽ có một số tương đương cho khi x là một vectơ.

Tôi đang hy vọng một số nhà điều hành hoặc chức năng mà tôi đang thiếu. Tôi chỉ có thể gọi y = num2cell(x) theo sau là f(y{:}), nhưng điều này không thực sự là những gì tôi đang tìm kiếm.

+0

Không 'x (:)' hoạt động? Hoặc nếu đó là một vector cột sử dụng 'x (:) ''. – Thor

+0

Tuyến 'num2cell' chính xác là những gì bạn nên tìm kiếm. – Jonas

+0

@ Jonas Công bằng đủ, trong đó giải pháp là đơn giản. Nhưng tôi nghĩ rằng đó là một chút ngớ ngẩn mà tôi phải chỉ định một biến tạm thời (và, do đó, có nội dung của biến được sao chép thêm một thời gian) chỉ để làm điều này. Tại sao tính năng này tồn tại đối với mảng ô chứ không phải cho mảng số (được cho là phổ biến hơn) (tức là "mat" trong "matlab")? Nhưng dù sao đi nữa, đó là lý do tại sao tôi hỏi: Nó có vẻ giống như một tính năng có khả năng được hỗ trợ nhưng tôi đã mất tích. – zroth

Trả lời

7

Như đã đề cập trong các ý kiến ​​

tmp = num2cell(x) 
f(tmp{:}) 

là con đường để đi.

Một chức năng splice sao cho f(splice(x)) sẽ làm những gì bạn muốn, không thực hiện thủ thuật. Thậm chí nếu bạn có thể chia đầu vào thành nhiều đầu ra, f chỉ nhận đối số đầu tiên (tương tự như khi bạn gọi hàm ở dòng lệnh mà không yêu cầu kết quả đầu ra).

Thậm chí không subsref sẽ hoạt động trong trường hợp này, ví dụ: subsref(num2cell([1 2]),struct('type','{}','subs',{{':'}})) sẽ thực hiện tương tự như hàm splice, tức là chỉ trả lại một đầu ra trừ khi nhiều kết quả đầu ra được yêu cầu một cách rõ ràng.

+0

Nếu 'f' nhận nhiều hơn một tham số, hàm này không cho phép bạn gọi' f (nối (x)) '. Lý do là matlab diễn giải số đối số đầu ra được yêu cầu là một. Bạn có thể thấy điều này một cách rõ ràng bằng cách đặt 'disp (nargout);' trong định nghĩa hàm. – zroth

+0

@zroth: cảm ơn bạn đã thử nghiệm. – Jonas

+0

Ồ, bạn nói đúng. Tôi hoàn toàn quên mất rằng tôi có thể gọi là 'subsref' một cách rõ ràng như thế.Tôi không hiểu tại sao cuộc gọi 'subsref' được đề xuất của bạn không giống với việc gọi' y {:} 'cho' y = num2cell ([1 2]) '; nhưng, như bạn đã nói, nó không hoạt động. Cảm ơn bạn đã cố gắng. – zroth

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