2012-05-18 5 views
0

У меня есть матрица, в которой каждая строка имеет разный размер, дополнительные места дополняются нулями. Эта матрица зависит от некоторых входных аргументов и поэтому имеет динамическое и нефиксированное количество строк и размеров.Как отправить несколько наборов различных размеров функции matlab?

for e.g. 
1 2 4 5 0 
1 3 0 0 0 
1 2 3 4 5 

Как создать и отправить n наборов разных размеров (один набор из каждой строки) в другую функцию, например. cartprod http://www.mathworks.com/matlabcentral/fileexchange/5475-cartprod-cartesian-product-of-multiple-sets?

ответ

0

Если вы не хотите нулей во входных векторах cartprod, вы можете использовать это:

CellArrayWithoutZeros = cellfun(@(x) x(find(x)), num2cell(Matrix, 2), 'UniformOutput', false); 

CartProdResultMatrix = cartprod(CellArrayWithoutZeros{:}); 

Edit: Если вы хотите отрезать только ведущие нули (на правой стороне любых ненулевых элементов) входных векторов cartprod:

CellArrayWithoutLeadingZeros = cellfun(@(x) x(1:find(x, 1, 'last')), num2cell(Matrix, 2), 'UniformOutput', false); 

CartProdResultMatrix = cartprod(CellArrayWithoutLeadingZeros{:}); 
Смежные вопросы