有没有办法在Matlab中使用squeeze进行矢量化?

4 matlab matrix vectorization

我目前正在使用squeeze从矩阵中删除两个单例维度.矩阵是一个大的4d矩阵M(:,:,:,:).前两个维度是行和列坐标(yx).第三维(indexes)中的变量选择第三维中的几个值M.

在我正在运行的for循环中,矩阵M被压缩为M(y,x,indexes,:),这使得前两个维度为单个维度.然后将这些尺寸移除以squeeze供使用pdist,如下所示:

pdist(squeeze(M(y,x,indexes,:)))
Run Code Online (Sandbox Code Playgroud)

我可以squeeze在这种情况下使用矢量化吗?(它在循环中占用了大量时间)

yuk*_*yuk 5

如果M在循环内没有改变矩阵,一个简单的解决方案是在运行for循环之前用PERMUTE重新排序矩阵维度:

Mperm = permute(M,[3 4 1 2]);
Run Code Online (Sandbox Code Playgroud)

然后你就可以解决Mperm的,而不是M作为Mperm(:,:,y,x).