使用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]
我做错了什么?是否有一个可选择的解决方案?

接受的答案

布鲁诺陈德良
布鲁诺陈德良 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 =4×1单元阵列
{(2 3 4 5)}{(1 2 3 4)}{[2 3 4]}{[1]}
c {:}
ans = 1×4
2 3 4 5
ans = 1×4
1 2 3 4
ans = 1×3
2 3 4
ans = 1
3评论
布鲁诺陈德良
布鲁诺陈德良 2022年11月2日
编辑:布鲁诺陈德良 2022年11月2日
您可以使用 离散化 的边排序(一)托尔和排序(A) + tol代替 找到。细节需要解决。

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!