Matlab代码转C++ 特定语法操作含义咨询
问题1:delx=x(k)-x(p)'的含义
- 首先
p = k+1:N生成的是从k+1到N的连续整数索引,x(p)会取出x数组中对应索引的元素,默认生成1行(N-k)列的行向量 - 末尾的
'是Matlab的共轭转置运算符,若x为实数数组,等价于普通转置,会把上述行向量转为(N-k)行1列的列向量 - 单元素
x(k)会通过Matlab的广播机制,减去列向量x(p)'的每一个元素,最终得到的delx是长度为(N-k)的列向量,每个元素对应x(k) - x(p[i])(p[i]为p序列的第i个值)
问题2:list=k+list的作用
find(R2<l2)返回的是R2数组中满足小于阈值l2的元素的相对下标:R2的第1个元素对应p=k+1的计算结果,第2个对应p=k+2,以此类推,find返回的下标是从1开始计数的相对位置- 加上k之后,就把相对下标转换为x、y数组的全局索引,方便后续直接取出对应位置的x、y值。举例:k=3时,若find返回list=[1,3],运算后得到list=[4,6],刚好对应全局索引的第4、6个元素,也就是p序列里的第1个值3+1=4、第3个值3+3=6
问题3:r2=delx.^2+dely.^2的运算逻辑
- 你的理解完全正确,这就是逐元素计算:Matlab中带
.前缀的运算符(.^、.*、./等)都是逐元素运算,和C++中遍历下标逐个计算r2[i] = delx[i] * delx[i] + dely[i] * dely[i]的效果完全等价。注意如果是不带.的^运算符则是矩阵幂运算,和逐元素运算逻辑完全不同。
转写C++额外注意事项
- Matlab的数组索引从1开始,C++默认从0开始,转写所有索引时需要对应减1
- 示例代码里的
fpx=zero(N,N)是笔误,正确Matlab写法是zeros(N,N),作用是生成N行N列的全零矩阵 - 代码里的
l2是预先定义的距离平方阈值,转写时注意提前定义对应变量
内容的提问来源于stack exchange,提问作者Shohei Sato
相关产品推荐
相关产品推荐

