You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:14:51