Matlab:根据指定列值获取目标列的所有首次出现项
在MATLAB中提取矩阵第2列为11时第1列的首次出现项
先把你的测试矩阵定义贴出来,方便复现验证:
m = repmat([0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2;11,11,22,22,33,33,11,11,22,22,33,33,11,11,22,22,33,33],1,2)'
针对你要的需求——当第2列等于11时,获取第1列的所有首次出现项(也就是每次连续相同的第1列值与11配对时的第一个元素),可以用下面的代码实现:
% 第一步:提取所有第2列为11的行的第1列数据 col1_filtered = m(m(:, 2) == 11, 1); % 第二步:找出连续相同值的首次出现位置 first_occurrences = col1_filtered([true; diff(col1_filtered) ~= 0]);
运行后,first_occurrences的结果完全符合你的期望:
0 1 2 0 1 2
代码解释:
m(m(:, 2) == 11, 1):这行先筛选出矩阵中所有第2列等于11的行,再只保留这些行的第1列数据。运行后得到的col1_filtered是[0;0;1;1;2;2;0;0;1;1;2;2],完全对应你矩阵里符合条件的行。diff(col1_filtered):计算相邻元素的差值,当相邻元素不同时差值不为0。我们在前面加一个true(表示第一个元素肯定要保留),再把差值不为0的位置标记为true,这样就得到了所有连续相同值组的第一个元素的索引,最后提取这些索引对应的元素就是我们要的结果。
如果想简化成一行代码,也可以这样写:
first_occurrences = m(m(:,2)==11,1)([true; diff(m(m(:,2)==11,1))~=0]);
不过分开写可读性更强,更推荐第一种写法。
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

