2012-07-12 14 views
14

Chcę spliczyć wektor do wywołania funkcji, ale nie mogę znaleźć sposobu, aby to zrobić. Czy to możliwe?Matlab --- splice wektor na argumenty dla wywołania funkcji

Aby rozwinąć na tym, co mam na myśli, że mamy wektor x długości n i funkcję f że trwa n argumenty. Chcę być w stanie zadzwonić pod numer f(x(1), x(2), ..., x(n)), dzwoniąc na coś takiego, jak f(x) lub f(splice(x)). Jeśli x byłaby macierzą komórek zamiast wektora, wywołanie f(x{:}) przyniosłoby pożądany rezultat; wydaje się uzasadnione, że będzie odpowiednik, gdy x jest wektorem.

Mam nadzieję, że jakiś operator lub funkcja, której mi brakuje. Mogę zadzwonić pod numer y = num2cell(x), a następnie f(y{:}), ale to nie jest to, czego szukam.

+0

Czy 'x (:)' nie działa? Lub jeśli jest to wektor kolumnowy, użyj 'x (:) ''. – Thor

+0

Trasa "num2cell" jest dokładnie tym, czego powinieneś szukać. – Jonas

+0

@ Jonas Wystarczająco uczciwe, ponieważ to rozwiązanie jest proste. Ale myślę, że to trochę głupie, że muszę określić zmienną tymczasową (i, w związku z tym, zawartość zmiennej jest kopiowana dodatkowy czas), aby to zrobić. Dlaczego ta funkcja istnieje dla macierzy komórek, ale nie dla (prawdopodobnie bardziej powszechnej) tablicy numerycznej (tj. "Mat" w "matlab")? Tak czy owak, dlatego pytałem: wydawało mi się, że jest to funkcja, która prawdopodobnie jest obsługiwana, ale której w jakiś sposób mi brakowało. – zroth

Odpowiedz

7

Jak już wspomniano w komentarzach

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

jest droga.

Funkcja splice, dzięki której f(splice(x)) zrobiłaby to, co chcesz, nie robi to. Nawet jeśli można podzielić dane wejściowe na wiele wyjść, f przyjmuje tylko pierwszy argument (podobnie jak w przypadku wywołania funkcji w wierszu poleceń bez żądania wyjścia).

Nawet subsref będzie działać w tym przypadku, ponieważ np. subsref(num2cell([1 2]),struct('type','{}','subs',{{':'}})) będzie działać tak samo, jak funkcja splice, tj. Zwraca tylko jedno wyjście, chyba że kilka wyjść zostało zamówionych jawnie.

+0

Jeśli 'f' ma więcej niż jeden parametr, funkcja ta nie pozwala na wywołanie' f (splice (x)) '. Powodem jest to, że matlab interpretuje liczbę żądanych argumentów wyjściowych jako jeden. Widać to wyraźnie przez umieszczenie 'disp (nargout);' w definicji funkcji. – zroth

+0

@zroth: dzięki za testowanie. – Jonas

+0

Och, masz rację. Całkowicie zapomniałem, że mogę tak wyraźnie nazwać 'subsref'.Nie rozumiem, dlaczego proponowane wywołanie 'subsref' nie jest identyczne z wywołaniem' y {:} 'dla' y = num2cell ([1 2]) '; ale, jak powiedziałeś, to po prostu nie działa. Dzieki za probe. – zroth

Powiązane problemy