使用ismembertol多个巧合
5视图(30天)
显示旧的评论
我有两个向量,我试图找到所有的巧合在一定公差。
例如:
一个= (5 4 3 2);B = (2 4 4 4 6 8);
我想获得一个单元阵列包含在每个单元格的数字巧合公差1(或更多)的单位。(A = B + - 1)
我有一个解决方案零单元(a = B),这将是这样的:
托尔= 0;
(tf, ia) = ismembertol (B, A,托尔,“DataScale”1);%为托尔= 0,这相当于使用ismember
idx = 1:元素个数(B);
ib = accumarray(非零(ia)、idx (tf), [], @ (x) {x})%这使细胞数组
的输出是:
ib =
[]
[]
(2 3 4)
[1]
这是根据需要。
如果我改变公差为1,代码不工作。相反,它输出:
托尔= 1
(tf, ia) = ismembertol (B, A,托尔,“DataScale”1);%的公差= 1,这相当于使用ismember
idx = 1:元素个数(B);
ib = accumarray(非零(ia)、idx (tf), [], @ (x) {x})%这使细胞数组
ib =
[5]
(2 3 4)
[]
[1]
当我希望获得:
ib =
(2 3 4 5)
(1 2 3 4)
(2 3 4)
[1]
我做错了什么?是否有一个可选择的解决方案?
0评论
接受的答案
布鲁诺陈德良
2022年11月2日
使用ismembertol是不合适的
一个= (5 4 3 2);B = (2 4 4 4 6 8);
托尔= 1;
(ib, ia) =找到(B < = A +托尔& B > = A-tol);
c = accumarray (ia、ib、[元素个数(A) 1], @ (x) {x})
c {:}