MATLAB 停留在复数矩阵的边界
MATLAB Staying in bounds of Complex matrix
我有一个复矩阵cdata
,即2144x2048
。我通过执行以下操作从 cdata
获取大于指定 threshold
的元素:
[row, col] = find(abs(cdata) > threshold);
row
和 col
可以有多个值。然后,我获取行和列值,执行计算以获得真实 x 数据的 N 个样本和 y 数据的 33 个样本,如下所示:
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
是一个常量值,它决定了我需要获取的样本数量。在此计算期间,特别是 xdata
的 cdata
的列部分和 ydata
的 cdata
的行部分,我超出了矩阵的边界,MATLAB 抛出以下错误:
??? Subscript indices must either be real positive integers or logicals
如何保证不越界?如果 row/col 对超出范围,我可以跳过它。
您遇到问题的原因是您没有将搜索限制在距矩阵边缘 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)))
吗?
我有一个复矩阵cdata
,即2144x2048
。我通过执行以下操作从 cdata
获取大于指定 threshold
的元素:
[row, col] = find(abs(cdata) > threshold);
row
和 col
可以有多个值。然后,我获取行和列值,执行计算以获得真实 x 数据的 N 个样本和 y 数据的 33 个样本,如下所示:
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
是一个常量值,它决定了我需要获取的样本数量。在此计算期间,特别是 xdata
的 cdata
的列部分和 ydata
的 cdata
的行部分,我超出了矩阵的边界,MATLAB 抛出以下错误:
??? Subscript indices must either be real positive integers or logicals
如何保证不越界?如果 row/col 对超出范围,我可以跳过它。
您遇到问题的原因是您没有将搜索限制在距矩阵边缘 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)))
吗?