【发布时间】:2019-12-05 19:25:58
【问题描述】:
我有一个大小为 (H, W) 的矩阵,我需要一个 2xP 输出,其中包含矩阵的所有对角线邻居,即对于每个 (i,j) 对都有 [(i,j); (i-1,j-1)] 和 [(i,j); (i-1,j+1)] 对(只有 2 对,而不是 4 对,因为我不需要重复的邻居对)。
矩阵的每个元素只是它在矩阵中的索引。
我尝试了蛮力(仅对两个这样的邻居都存在的点进行了尝试):
coord = reshape(1:w*h, h, w);
pairs = [];
for i=2:h-1
for j=2:w-1
pairs = [pairs [coord(i,j) coord(i, j); coord(i-1,j-1) coord(i-1, j+1)]];
end
end
但是太慢了。在 Matlab 中重写此代码的智能和快速方法是什么?最好包括仅存在一个此类邻居的情况(例如,第二行和最后一列:仅存在左上邻居但不存在右上)。
对于 h=w=10,这段代码给了我(正确,我希望)128 对。
【问题讨论】:
-
预分配
pairs肯定有帮助:de.mathworks.com/help/matlab/matlab_prog/… 大小是事先知道的。 -
@Daniel 谢谢,确实有帮助。我听说预分配有帮助,但真的没有意识到有多少。
标签: matlab