爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3198|回复: 5

[求助] 请教取数组中次极大(小)的简单方法

[复制链接]

新浪微博达人勋

发表于 2014-8-30 07:33:47 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
数组中的极大(小)值和位置可以用maxval (minval) 和maxloc (minloc)得到, 那么次极大(小)要如何取呢?
我记得上面的几个函数是可以接受掩码参数的, 但是具体这个掩码怎么生成不太清楚

麻烦大侠能给出代码示例, 多谢了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2014-8-30 09:02:22 | 显示全部楼层
mask就是一个逻辑运算 比如你找到了  最大值是50  数组是a ,a<50就是一个mask,这样再找最大值应该就能找到第二大的了。我也没试过 你试完了可以来反馈一下~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-8-30 10:17:44 | 显示全部楼层
写程序处理,在找出来极大值之后可以通过赋值的方法去掉极大值,然后从剩下来的里面再挑。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-30 12:11:52 | 显示全部楼层
mofangbao 发表于 2014-8-30 09:02
mask就是一个逻辑运算 比如你找到了  最大值是50  数组是a ,a

参考版主的意见, 做了一个测试代码, 如下:

  1. program main
  2.     implicit none
  3.     integer :: n
  4.     real(4), allocatable, dimension(:,:) :: A
  5.     n=8
  6.     allocate(A(n,n))
  7.     A(1,:)=(/24.,64.,8.0,6.0,2.,6.,12.,26./)
  8.     A(2,:)=(/12.,25.,5.0,2.0,6.,9.,12.,20./)
  9.     A(3,:)=(/42.,86.,82.,74.,120.,45.,42.,80./)
  10.     A(4,:)=(/38.,80.,42.,14.,18.,49.,21.,35./)
  11.     A(5,:)=(/36.,78.,62.,54.,54.,40.,29.,96./)
  12.     A(6,:)=(/96.,70.,52.,34.,38.,65.,12.,46./)
  13.     A(7,:)=(/60.,120.,12.,2.,40.,8.,12.,24./)
  14.     A(8,:)=(/80.,30.,24.,4.0,6.,16.,36.,56./)
  15.     !call matrixOutput(n,A,6)
  16.     print *,"Maxval of A:",maxval(A)
  17.     print *,"Maxloc of A:",maxloc(A)
  18.     print *,"Maxval2 of A:",maxval(A,A<120)
  19.     print *,"Maxloc2 of A:",maxloc(A,A<120)
  20. end program
复制代码


结果如下:

  1. Maxval of A:   120.000000
  2. Maxloc of A:           7           2
  3. Maxval2 of A:   96.0000000
  4. Maxloc2 of A:           6           1
复制代码


现在的问题是, 如果数组中有两个相同的极大值, 比如示例代码中有两个120, 我希望取到的第二个极大值是另外一个120
也就是说, 我希望是按位置取掩码, 而不是按值取掩码
请教大侠实现方法, 多谢了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2014-8-31 09:08:31 | 显示全部楼层
那就用深深说的方法把最大值赋值为一个小值吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-1 11:19:50 | 显示全部楼层
mofangbao 发表于 2014-8-31 09:08
那就用深深说的方法把最大值赋值为一个小值吧

看来也只能如此了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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