clear;clc
A=randi(100,[100 100 100]);
B=randi(100,[100 100 100]);
C=randi(100,[100 100 100]);
D=randi(100,[100 100 100]);
eig_l = zeros(100,100,100);
eig_s = zeros(100,100,100);
E=[reshape(A(:),[1 1 1000000]),reshape(B(:),[1 1 1000000]);reshape(C(:),[1 1 1000000]),reshape(D(:),[1 1 1000000])];
c = num2cell(E,[1 2]);
sc=squeeze(c);
tic
M=cellfun(@eig, sc, 'UniformOutput', false);
toc
eigM = sort(reshape(cell2mat(M),[2 1000000]));
こんにちは、cellfunやarrayfunを使えばforを使わずに書くことができます。ただ、計算時間自体は、今回のものは数秒でできるようなので、あまり大きな影響はないかもしれません。
試しに、1から100までのループを3回繰り返した場合のコードをfor文を使わずに書くと上のようになります。
indexを利用して書くとfor文を使わずにかけることが多いです