所以我有一个网格
x = linspace(0,1,250);
y=x;
[X,Y] = meshgrid(x,y) ;
在每个点,我想要一个2x2矩阵(我会找到特征值)。但我无法找出最好的方法(没有循环整个250x250空间)。
假设每个X,Y的矩阵都是
M(1,1) = X
M(2,2) = Y
M(1,2) = sin(2*pi*X)
M(2,1) = X.*Y.^2;
最好的方法是什么,然后得到每个X的特征值,Y?
答案 0 :(得分:2)
不确定你的意思"最好",最快?如果我理解你想要的东西(每个像素2个特征值),这是一个简单的方法:
从您的定义开始
x = linspace(0,1,250);
y=x;
[X,Y] = meshgrid(x,y) ;
S=sin(2*pi*X);
XY2=X.*Y.^2;
然后,我们可以使用linear indexing:
for n=1:numel(X)
M(:,n)=eig([X(n), S(n); XY2(n) , Y(n)]);
end
就是这样,所有信息都在M ...
我的笔记本电脑花了大约3秒钟。如果您希望在2x2矩阵的情况下更快地实现eig
函数,则可以使用this。如果你想从线性索引返回到2D(i,j)索引,你可以使用它来获得像素i,j的特征值:
M(:, sub2ind(size(X),i,j))