MATLAB提取矩阵每行最大值及其相邻的值

最近遇到一个问题,我需要把一个矩阵每行的最大值及其之后相邻的几个数值给提取出来,历经了几个阶段:一开始想着简单直接错误;后来为了准确逐行循环,但数据量有点大,这里使用线索引避免for循环:

%% 线索引来避免循环
A = rand(10,8);
% 扩充,避免最大值落于end处(实际数据是不会存在这个问题的)
A(:,end+1)=-1;
A(:,end+1)=-1;
[ma,im] = max(A,[],2);
% 方法一,错误:
D = A(:,im:im+2); 
% 方法二,for循环,绝对正确
B = [];
[m,n]=size(A);
for i = 1:m
   B(i,:)=A(i,im(i):im(i)+2); 
end
% 方法三,线索引
C = [];
idx = sub2ind(size(A),1:m,im');C(:,1)=A(idx)';
idx = sub2ind(size(A),1:m,(im+1)');C(:,2)=A(idx)';
idx = sub2ind(size(A),1:m,(im+2)');C(:,3)=A(idx)';
% 检测
m_difb = max(max(abs(B-C)))
m_difd = max(max(abs(B-D)))

这里,B和C的结果是一致的。同时考虑,为什么方法一的结果不对?

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值