我目前正在使用squeeze
从矩阵中删除两个单例维度。矩阵是一个大的4d矩阵M(:,:,:,:)
。前两个维度是行坐标和列坐标(y
和x
)。第三维中的变量(indexes
)会在M
的第三维中选择多个值。
在我正在运行的for循环中,矩阵M
被解析为M(y,x,indexes,:)
,这使前两个维度成为单一维度。然后使用squeeze
删除这些维度,以便在pdist
中使用,如下所示:
pdist(squeeze(M(y,x,indexes,:)))
在这种情况下,我可以使用squeeze
进行矢量化吗? (它在循环中占用了大量时间)
答案 0 :(得分:5)
如果在循环内没有更改矩阵M
,一个简单的解决方案是在运行for循环之前用PERMUTE重新排序矩阵维度:
Mperm = permute(M,[3 4 1 2]);
然后,您可以将Mperm
代替M
作为Mperm(:,:,y,x)
。
答案 1 :(得分:1)
对于使用reshape
这类问题,通常会在挤压方面取得巨大进步。我有一个问题,挤压占用了一个功能所花费的时间的一半左右。使用分析器我可以看到挤压做了一些不必要的检查。使用重塑可将相同操作的时间减少到原始时间的15%。