matlab Sub2ind超出范围下标

1qczuiv0  于 2023-08-06  发布在  Matlab
关注(0)|答案(1)|浏览(193)

我尝试在matlab中使用sub2ind函数,以便从矩阵中获取一个向量,该矩阵表示我想要提取的线性函数,如以下示例:
基质M:

01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

字符串
线性函数,我用它来表示我想从矩阵中提取的向量。我想绕着中心旋转,所以我从0的斜率开始,然后递增,直到90°。

slope = 20;  Approx. 3°
y = slope * x


我想要这个输出:

0 0 0 1 0
0 0 1 0 0 
0 0 1 0 0
0 0 1 0 0
0 1 0 0 0


或者直接这个向量:

V = {22, 18, 13, 08, 04}


我用matlab写了这段代码:

M = zeros(201);
x = -1:0.01:1;
y = 20 * x;
sub2ind(size(m), y, x);


我得到了以下错误:

Error using sub2ind
Out of range subscript.


我检查了x,y和M的大小,应该可以...

mtb9vblg

mtb9vblg1#

您需要将坐标(假设0是数组的中间)转换为适当的索引(从数组的左侧和顶部的1开始)。您还需要将坐标舍入为索引,并删除重复项。这段代码做了这些事情:

x = -1:0.01:1;
y = 20 * x;

x = x + 100; % Let’s assume (100,100) are the indices of your origin.
y = y + 100;

coords = round([x.', y.']);
coords = max(1, coords); % just in case some are too low
coords = min(size(M), coords); % just in case some are too high
coords = unique(coords, 'rows');

V = M(sub2ind(size(M), coords(:,2), coords(:,1)));

字符串

相关问题