得到第一个逻辑值的位置(多组)的一个数组

1视图(30天)
嗨。我试图找到一个数组的值增加到一个特定的阈值(打= 5)。例如,我一开始用:
x = (0.5, 1.6, 1.5, 5.2, 8.5, 9.3, 6.3, 2.2, 1.9, 1.8, 7.4, 6.4, 6.5, 2.3, 2.4, 8.5, 7.6, 5.3, 2.0, 2.4)
我将这样一个逻辑:
打= 5;
x_log = x >打;
给我:
x_log = [0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0]
我真正需要的是一个逻辑,只有每组的第一个。所以输出应该是[0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0]…有一个功能我不知道可以这样做吗?我不能找到它。或者你建议的另一种方式使用原始数组的呢?
提前谢谢!
4评论
BobbyRoberts
BobbyRoberts 2022年6月16日
如果你使用原始数组x,对不起。而不是逻辑。我在这里将它转换为逻辑使用x_idx = x > 5。

登录置评。

接受的答案

沃斯
沃斯 2022年6月16日
x = (0.5, 1.6, 1.5, 5.2, 8.5, 9.3, 6.3, 2.2, 1.9, 1.8, 7.4, 6.4, 6.5, 2.3, 2.4, 8.5, 7.6, 5.3, 2.0, 2.4);
打= 5;
x_log = x >打
x_log =1×20逻辑数组
0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0
第一个办法指数之一 1 史:
idx =找到(diff([假x_log]) = = 1)
idx = 1×3
4 11日16
另一种方法:
idx = strfind([假x_log],[假真])
idx = 1×3
4 11日16
(在这两种情况下,一个 假/ 0 元素是前缀 x_log 正确处理案件 x_log 始于一个 真正的/ 1 )。
那么,无论你如何得到 idx ,建立 x_new idx :
x_new = false(元素个数(x));
x_new (idx) = true
x_new =1×20逻辑数组
0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0

答案(1)

图像分析
图像分析 2022年6月16日
试试这个:
x = (0.5, 1.6, 1.5, 5.2, 8.5, 9.3, 6.3, 2.2, 1.9, 1.8, 7.4, 6.4, 6.5, 2.3, 2.4, 8.5, 7.6, 5.3, 2.0, 2.4);
掩码= x > 5
掩码=1×20逻辑数组
0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0
道具= regionprops(面具,“PixelIdxList”);
k = 1:长度(道具)
startingIndexes (k) =道具(k) .PixelIdxList (1);
结束
%在命令窗口中显示:
startingIndexes
startingIndexes = 1×3
4 11日16

下载188bet金宝搏


释放

R2022a

社区寻宝

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

开始狩猎!