2015-03-05 2 views
2

Похоже, эта проблема должна быть общей, но я не нашел хороший дубликат ...подматрица на основе вектора размера

Я реализует 2 S-функцию уровня с переменным размером многомерным выходом , Состояние должно быть в векторах Durable фиксированного размера, поэтому я нулевую матрицу ввода до максимального размера, разрешенного для ввода, а затем изменяю его на вектор.

Когда я верну его обратно к матрице для вывода, мне нужно обрезать ее до нужного размера.

Функция должна быть достаточно общей, чтобы поддерживать произвольное количество измерений. Размер вывода хранится в массиве размеров.

Например, у меня может быть матрица размером 500x500 N и массив размеров S = [40 25]. Мне нужно выражение MATLAB, которое даст мне N (1: S (1), 1: S (2)), но оно должно работать для любого количества измерений, поэтому я не могу просто его жестко кодировать.

+0

Вы ищете м кода или C++ код? – Daniel

+0

@ Daniel: m code – Katie

ответ

2

Вот решение в м-коде:

%your input 
M=rand(10,10,10); 
S=[2,3,4] 
%generate indices: 
Index=arrayfun(@(x)(1:x),S,'uni',0) 
%use comma separated list to index: 
smallM=M(Index{:})