MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 126|回复: 6|关注: 0

[已解决] 已知一组数,找特征值

[复制链接]

新手

11 麦片

财富积分


050


5

主题

26

帖子

0

最佳答案
给定一组数据,按升序排列如1,3,4,9,11,13,22,45,……
请教大神
不用if的话,如何实现找出数据中满足大于前后两个数2倍的数?

MATLAB 基础讨论
版块优秀回答者

中级

505 麦片

财富积分


5001500


8

主题

560

帖子

92

最佳答案
  • 关注者: 18
发表于 7 天前 | 显示全部楼层 |此回复为最佳答案
啥叫大于前后两个数二倍?我暂时理解成后面数比前面数二倍还大。


  1. a=[1 3 4 9 11 13 22 45];
  2. 2*a(1:end-1)<=a(2:end)
复制代码


ans =

  1×7 logical array

   1   0   1   0   0   0   1


输出1的位置就是它的后一个数大于自己二倍的位置。
想要具体的位置索引:

  1. find(ans==1)
复制代码


ans =

     1     3     7

新手

11 麦片

财富积分


050


5

主题

26

帖子

0

最佳答案
 楼主| 发表于 7 天前 | 显示全部楼层
悟得 发表于 2017-10-11 18:30
啥叫大于前后两个数二倍?我暂时理解成后面数比前面数二倍还大。

谢谢!
嗯,不好意思,描述得不太清楚。
数据不一定是按升序排布,我要找出既大于前一个数的2倍,也大于后一个数的两倍的数
是比如a=[1 3 2 9 4 13 22 45],则返回9或者9的位置

新手

11 麦片

财富积分


050


5

主题

26

帖子

0

最佳答案
 楼主| 发表于 7 天前 | 显示全部楼层
悟得 发表于 2017-10-11 18:30
啥叫大于前后两个数二倍?我暂时理解成后面数比前面数二倍还大。

因为数据量比较大,如果用if的话很慢:'(

MATLAB 基础讨论
版块优秀回答者

中级

505 麦片

财富积分


5001500


8

主题

560

帖子

92

最佳答案
  • 关注者: 18
发表于 7 天前 | 显示全部楼层
mq0511 发表于 2017-10-11 18:38
谢谢!
嗯,不好意思,描述得不太清楚。
数据不一定是按升序排布,我要找出既大于前一个数的2倍,也大于 ...

无所谓的,我的方法已经教给你了。

你就可以先找到比前面大2倍的位置。再找到比后面大2倍的位置。
再把两个 01的序列做一次与运算就行了。

MATLAB 基础讨论
版块优秀回答者

中级

505 麦片

财富积分


5001500


8

主题

560

帖子

92

最佳答案
  • 关注者: 18
发表于 7 天前 | 显示全部楼层
mq0511 发表于 2017-10-11 18:38
谢谢!
嗯,不好意思,描述得不太清楚。
数据不一定是按升序排布,我要找出既大于前一个数的2倍,也大于 ...
  1. a=[1 3 2 9 4 13 22 45];
  2. b1=[0 2*a(1:end-1)<=a(2:end)];
  3. b2=[a(1:end-1)>=2*a(2:end) 0];
  4. weizhi=find((b1&b2)==1)%位置
  5. shuzhi=a(weizhi)%数值
复制代码
看你比较萌新,给你写一下这个代码吧。

返回9:
TIM截图20171011184700.png

新手

11 麦片

财富积分


050


5

主题

26

帖子

0

最佳答案
 楼主| 发表于 7 天前 | 显示全部楼层
悟得 发表于 2017-10-11 18:41
无所谓的,我的方法已经教给你了。

你就可以先找到比前面大2倍的位置。再找到比后面大2倍的位置。

嗯嗯,是的,非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表