检测值是否在彼此的范围内并取中点-MATLAB

安娜·舒曼

接下来的内容:检测任何值是否在彼此的某个值之内-MATLAB

我目前正在使用randi生成一个随机数,然后从中减去并添加第二个数字-使用生成poissrnd

for k=1:10
a = poissrnd(200,1);
b(k,1) = randi([1,20000]);
c(k,1:2) = [b(k,1)-a,b(k,1)+a];
end
c = sort(c);

c 提供以下格式的输出:

823     1281
5260    5676
5372    5760
5379    5779
6808    7244
6869    7293
9203    9653
12197   12563
14411   14765
15302   15670

本质上是a在中选择的点周围的边界+/- b

然后,我想设置一个附加变量(即d = 2000),该变量用作阈值,通过该阈值匹配值然后将其合并。为此考虑了边界-当d = 2000时,上述值的输出为:

1052
7456
13933

边界823-1281不在任何其他值的2000范围内,因此采用中点-反映原始值。下一个中点是在5260和9653之间,因为在进行操作时,每个连续值都在前一个值的2000以内,直到9653。然后,采用相同的逻辑取中点在12197和15670之间。

有没有一种快速简便的方法来调整链接问题中给出的答案以处理2列格式?

编辑(以使其更清楚):

c可以将保留的值视为划分在线上“块”的边界。检查每个边界以查看是否有任何边界在其2000范围内(黑线)。

在此处输入图片说明

一旦任何一条黑线碰到一个红色块,则整个红色块将全部合并到同一合并块中。这就是为什么计算出的第一个中点值为1052的原因-从前两个边界发出的两条黑线什么都没有触及。但是,下一组块彼此接触。这会将它们全部合并到合并中,以便在9653和5260 = 7456之间取中点。

起始于12197的块超出了它的前一个块,因此它保持独立。我没有显示所有的块。

编辑2 @Esteban:

b =
849
1975
8336
9599
12057
12983
13193
13736
16887
18578

c =
662     1036
1764    2186
8148    8524
9386    9812
11843   12271
12809   13157
12995   13391
13543   13929
16687   17087
18361   18795

然后,您的脚本将产生结果:

8980
12886
17741

实际上应该是:

1424
8980
12886
17741

因此,它只是缺少第一个值-如果没有合并发生,则仅在两个值之间取中点。有时这似乎可行,而其他时候则无效。

例如,在这里它起作用(当将值设置为1000而不是2000作为测试时):

c = 
2333    2789
5595    6023
6236    6664
10332   10754
11425   11865
12506   12926
12678   13114
15105   15517
15425   15797
19490   19874

result = 
2561
6129
11723
15451
19682
迪卡卡

看看这是否适合您-

th = 2000   %// threshold

%// Column arrays
col1 = c(:,1)
col2 = c(:,2)

%// Position of "group" shifts
grp_changes = diff([col2(1:end-1,:) col1(2:end,:)],[],2)>th

%// Start and stop positions of shifts
stops = [grp_changes ; 1]
starts = [1 ; stops(1:end-1)]

%// Finally the mean of shift positions, which is the desired output
out = floor(mean([col1(starts~=0) col2(stops~=0)],2))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检测任何值是否在彼此的某个值之内-MATLAB

来自分类Dev

检测范围是否重叠-MATLAB

来自分类Dev

Matlab:如果索引在范围内,则求和相应的值

来自分类Dev

在特定范围内矢量的MATLAB绘图

来自分类Dev

Matlab:如何根据其他列中的条目求和一定范围内的值

来自分类Dev

Matlab 中的随机整数在一个范围内但不包括值

来自分类Dev

在MATLAB中选择颜色范围内的像素

来自分类Dev

Matlab在所有轴范围内扩展图

来自分类Dev

在 matlab 中查找在数组或矩阵范围内计算的最小值或最大值的索引

来自分类Dev

值是否在范围内

来自分类Dev

MatLab kinect检测

来自分类Dev

Matlab-对象检测

来自分类Dev

峰值检测Matlab

来自分类Dev

double类型的框架必须在0到1的范围内:MATLAB

来自分类Dev

double类型的框架必须在0到1的范围内:MATLAB

来自分类Dev

Matlab 计算给定波长范围内 10 层的线参数 x

来自分类Dev

最小化一个范围内三个变量的函数(MATLAB)

来自分类Dev

递增MATLAB范围

来自分类Dev

Python中的Matlab范围

来自分类Dev

Matlab atan结果范围

来自分类Dev

缩放变量的范围-MATLAB

来自分类Dev

如何测试值是否在范围内?

来自分类Dev

检查BigDecimal值是否在范围内

来自分类Dev

查找值是否在范围内

来自分类Dev

检查列表值是否在范围内

来自分类Dev

如何比较值是否在范围内?

来自分类Dev

在MATLAB中检测图像内的圆形

来自分类Dev

MatLab是否值得购买?

来自分类Dev

评估内的Matlab索引