2014-12-18 5 views

ответ

4

Я вообще не люблю arrayfun (или невменяемым функции), но если число измерений не в тысячах, то это должно быть просто отлично :

Nv = size(A)/2; 
S = arrayfun(@(x){1:x},Nv); 
B = A(S{:}); 

Должно работать и с размерами разного размера. Просто решите, как вы хотите иметь дело с размерами, где mod(size(A),2)~=0.

+0

спасибо. Я предположил, что N равнозначно тому, что упоминалось выше. –

+0

Для решения без циклов используйте 'S = repmat ({1: размер (A, 1)/2}, ndims (A), 1)' – Daniel

+3

Только что реализовано не тысячи измерений. В последних версиях не более 47 (или, может быть, 64 в последних версиях) не одиночных размеров. Все, что за пределами, не может быть проиндексировано и потребует индексов, больших, чем uint64. Оптимизация здесь совершенно не нужна, итерация таких нескольких значений arrayfun полностью прекрасна. – Daniel

Смежные вопросы