[ncl-talk] How to find the same elements in two matrixes

Lin Wang wanglin at post.iap.ac.cn
Sat Dec 20 20:29:47 MST 2014


Thanks Yong-jie and Shea, it works very well!

Best,
Lin


-----原始邮件-----
发件人: "Yong-jie Huang" <huangyj at mail.iap.ac.cn>
发送时间: 2014年12月20日 星期六
收件人: wanglin at post.iap.ac.cn
抄送: shea at ucar.edu, ncl-talk at ucar.edu
主题: Re: [ncl-talk] How to find the same elements in two matrixes

Hi, I think that you can just do:



ncl 0> A = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9/)

ncl 1> B = (/ 2, 14, 7, 1/)

ncl 2>  

ncl 3> C = A(ind(.not.ismissing(get1Dindex(B,A))))

ncl 4> print(C)







Variable: C

Type: integer

Total Size: 12 bytes

            3 values

Number of Dimensions: 1

Dimensions and sizes:   [3]

Coordinates: 

(0)     1

(1)     2

(2)     7


Good luck!


Yongjie Huang

> Date: Fri, 19 Dec 2014 08:39:55 -0700
> From: Dennis Shea <shea at ucar.edu>
> Subject: Re: [ncl-talk] How to find the same elements in two matrixes
> To: Lin Wang <wanglin at post.iap.ac.cn>
> Cc: ncl-talk <ncl-talk at ucar.edu>
> Message-ID:
>  <CAOF1d_5DLMe=Tv794H9ekb598XgNKcuf9AtES=9X8ABhj9pFWg at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
> 
> I do not think you can do it without a loop.
> 
> function get_dup_elements(a[*], b[*])
> begin
>    dima = dimsizes(a)
>    dimb = dimsizes(b)
>    ndup = -1
> 
>    if (dima.le.dimb) then
>        dimd = new( dima, typeof(a))
>        do n=0,dima-1
>            ii := ind(b.eq.a(n))
>            if (.not.ismissing(ii(0))) then
>                ndup =  ndup+1
>                dimd(ndup) = a(n)
>            end if
>        end do
>    else
>        dimd = new( dimb, typeof(a))
>        do n=0,dimb-1
>           ii := ind(a.eq.b(n))
>           if (.not.ismissing(ii(0))) then
>                ndup = ndup+1
>                dimd(ndup) = b(n)
>           end if
>        end do
> 
>    end if
> 
>    return(dimd(0:ndup))
> end
> 
> A = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9/)
> B = (/ 2, 14, 7, 1/)
> 
> dup = get_dup_elements(A,B)
> print(dup)
> 
> ;; sort(dup)  ; ascending order
> 
> 
> 
> 
> On Wed, Dec 17, 2014 at 1:59 AM, Lin Wang <wanglin at post.iap.ac.cn> wrote:
> 
> > Dear all,
> >
> > Suppose:
> > A = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9/)
> > B = (/ 2, 14, 7, 1/)
> >
> > If don't use loop, how to find the same elements between A and B such as
> > (/1, 2, 7/)? Thanks.
> >
> > Best wishes,
> > Lin Wang
> >


-----------------------------------------------------------------------------------
HUANG Yong-jie
Key Laboratory of Cloud-Precipitation Physics and Severe Storms (LACS), 
Institute of Atmospheric Physics, Chinese Academy of Sciences
Email Address: huangyj at mail.iap.ac.cn OR huangynj at gmail.com 
-----------------------------------------------------------------------------------







--
Lin WANG PhD
Center for Monsoon System Research
Institute of Atmospheric Physics, Chinese Academy of Sciences
P. O. Box 2718, Beijing 100190, P.R. China
Tel: 86-10-62579608
Fax: 86-10-62568192
Homepage: http://cmsr.iap.ac.cn/?p=97


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20141221/d15d3312/attachment.html 


More information about the ncl-talk mailing list