作者FHTsai (.)
看板MATLAB
标题Re: [问题] 矩阵内的值做比对
时间Wed Jan 9 22:59:45 2008
※ 引述《banco (Acoustic)》之铭言:
: ※ 引述《yang0915 (人生路...)》之铭言:
: : 假设 BR 矩阵(维度Nx2) =
: : 132 115...第一组
: : 132 115
: : 132 110
: : 158 123
: : 142 135
: : 123 142
: : . .
: : . .
: : . . ...第N组
: : 等 等
: : 另外一个 H 矩阵(维度3x2) =
: : 132 115...第一组
: : 132 110...第二组
: : 123 142...第三组
: : 如果说BR里面每一组有等於H里任一组(H组别没重复),
: : 该用什麽技巧去判断(勿用for loop)
: [i,j] = find(BR*(1./H')==2)
: i 会回传 BR 里符合 H 的 row index
: 以上是半残的解法,以下应该才是没问题的解法(两者皆可行)
: 主要是利用两相等向量在向量空间夹角为0的特性进行演算
: 下列式子并没有透过 acos() 转到角度做判断 (此时判断式为 == 0 )
: 而直接在向量空间判别其值是否为1
: [i,j] = find( (BR*H')./((sum(BR.^2,2))*(sum(H.^2,2))').^0.5 == 1 )
: [i,j] = find( ((BR*H')./(diag(BR*BR')*diag(H*H')')).^0.5 == 1 )
很Nice的演算法
这里另提供一个matlab内的函数:
ismember
范例:
idx = find( ismember( BR , H , 'rows' ) )
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.229.74.146
1F:推 banco:fantastic~ 01/10 00:09
2F:→ repmat:good 01/10 08:00