我有一个复杂的矩阵cdata
,即2144x2048
。我通过执行以下操作从cdata
获取大于指定threshold
的元素:
[row, col] = find(abs(cdata) > threshold);
row
和col
可以有多个值。然后,我获取行和列值,我执行计算以获得真实x数据的N个样本,以及33个y数据样本,如下所示:
xdata = real(cdata(row(i),col(i)-bw:col(i)+bw))
ydata = real(cdata(row(i)-bw:row(i)+bw,col(i)-bw:col(i)+bw))
其中bw
是一个常数值,用于确定我需要获取的样本数。在此计算过程中,特别是cdata
的{{1}}的列部分和xdata
的{{1}}的行部分,我超出了矩阵的边界,MATLAB抛出了以下错误:
cdata
我如何确保不超出界限?如果它超出界限,我必须跳过一个行/列对。
答案 0 :(得分:1)
您遇到问题的原因是因为您没有将搜索限制在距离矩阵边缘bw
更近的位置。这意味着可以在矩阵边缘附近找到高于阈值的值。当您从这些索引中添加或减去bw
时,您最终会超出范围。您可以像这样限制搜索。
[row, col] = find(abs(cdata(bw+1:end-bw,bw+1:end-bw)) > threshold);
row = row + bw;
col = col + bw;
这可以保证你的行和列索引在边界内,所以当你抓住它们周围的区域时,你就不会超出界限。
旁注。代码中的ydata
变量正在索引矩阵的整个方形区域,而xdata
仅索引一行的一部分。您的ydata
实际应该是ydata = real(cdata(row(i)-bw:row(i)+bw, col(i)))
吗?