You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何根据MATLAB矩阵第三列的取值提取前两列数据

如何根据MATLAB矩阵第三列的取值提取前两列数据

嗨,我来帮你搞定这个MATLAB的索引问题~

你之前的代码Test = A(A(:,3) == Val);之所以只得到类似“第一列”的结果,其实是因为MATLAB的索引规则在搞事情:当你只用一个一维的逻辑向量去索引二维矩阵时,它会把这个逻辑向量当作线性索引来用(按列优先的顺序遍历矩阵),最后会把所有符合条件的元素拉成一个列向量,而不是你想要的保留前两列的子矩阵。

要实现你想要的效果,只需要在索引时同时指定行筛选条件和列范围就可以了,正确的写法有两种:

分步写法(更清晰,适合新手)

% 先获取第三列等于Val的所有行的逻辑索引
row_mask = A(:, 3) == Val;
% 提取这些行的第1、2列
Test = A(row_mask, [1, 2]);

合并写法(更简洁)

Test = A(A(:, 3) == Val, [1, 2]);

举个直观的例子验证

假设你的矩阵A是这样的:

A = [1  2  3;
     4  5  6;
     7  8  3;
     9 10  6];
Val = 3;

用上面的正确代码运行后,Test会得到:

1     2
     7     8

完全符合你想要的——提取第三列等于3的行的前两列。

而如果用你之前的代码A(A(:,3)==Val),得到的结果会是:

1
     7
     2
     8
     3
     3

这就是你误以为“只提取第一列”的原因——它把符合条件的两行的所有元素(共6个)按列优先的顺序拼成了一个列向量,自然看起来和你要的结果不一样啦。

备注:内容来源于stack exchange,提问作者Shinobii

火山引擎 最新活动