РЕДАКТИРОВАТЬ: Мой ответ ниже применяется в целом, но вы утверждаете, что ваши матрицы являются коллекциями собственных векторов. Это подразумевает, что матрицы ортогональны и, следовательно, транспонирование является обратным. В этом случае вы можете просто использовать permute
для транспонирования матриц и получения инверсии всех матриц, то есть что-то вроде
CoBinv = permute(CoB,[1,2,3,5,4]);
Исходный ответ: Если у вас есть Графический процессор в вашем компьютере вы можете использовать pagefun
. Основное использование c состоит в том, что сначала два измерения задают матрицу, а затем она проходит по остальным измерениям
A = rand(3,3,512,512,512,'gpuArray');
B = pagefun(@inv,A);
s = size(B) % 3 x 3 x 512 x 512 x 512
Таким образом, вам придется использовать permute
для переключения размеры, располагающие матрицу 3x3 в первых двух измерениях, а не в двух последних, используйте pagefun
, а затем переключитесь обратно.
CoBtmp = permute(CoB,[4,5,1,2,3]);
CoBinv = pagefun(@inv,CoBtmp);
CoBinv = permute(CoBinv,[3,4,5,1,2]);
Отказ от ответственности: у меня в моем ноутбуке нет графического процессора, из которого я сейчас нахожусь работает, поэтому я не проверял выше.