В MATLAB, как я могу удобно предоставить много аргументов для функции? - PullRequest
4 голосов
/ 08 декабря 2010

У меня есть функция MATLAB myfun(v1,v2,v3,v4,v5,v6) и матрица 30x6 A. Чтобы вызвать функцию, нужно передать каждый столбец A в качестве отдельного входного аргумента:

myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))

Просто интересно, есть ли лучший способ сделать это без явного написания столько раз A(:,*)?

Ответы [ 2 ]

5 голосов
/ 08 декабря 2010

Вы можете сначала поместить каждый столбец A в ячейку массива ячеек с помощью функции NUM2CELL , а затем передать содержимое массива ячеек как список, разделенный запятыми синтаксис {:}:

B = num2cell(A,1);
myfun(B{:});
2 голосов
/ 08 декабря 2010

Перепишите свою функцию, чтобы принять оба соглашения:

function [] = myfun(v1,v2,v3,v4,v5,v6)
    if nargin==1
        v2 = v1(:,2);
        v3 = v1(:,3);
        v4 = v1(:,4);
        v5 = v1(:,5);
        v6 = v1(:,6);
        v1 = v1(:,1);
    end

    %# use v1,v2,v3,v4,v5,v6
    %# ...
end

Теперь вы можете вызывать оба:

myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))
myfun(A)

Обычно вам нужно выполнить больше проверок, чтобы проверить правильное количество аргументов...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...