爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3128|回复: 2

[混合编程] IDL之集合运算(自定义)

[复制链接]

新浪微博达人勋

发表于 2020-6-15 10:00:53 | 显示全部楼层 |阅读模式

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

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

x
学习IDL至今约6年了,我还不知道它有没有集合运算,反正我没找到。

由于编程中经常遇到集合运算的问题,或者有的问题可以通过集合运算简化,所以我索性自己写了一个,
见附件set_cal(即集合运算set_Calculation之意)
set_cal函数参数有2个:x,y,同时支持标量和2维向量,返回值是一个结构体,有4个结果,提供了x和y的交集、并集、2个差集(x-y,y-x)。


写PyQt、JS...这种软件开发的脚本,我觉得自己超聪明的,
每次写这种数学性的算法,我就觉得自己是个弱智
这个函数写了半天之久。


后来发现运行的时候很慢,我突然意识到自己的愚蠢:
明明只需要计算一个差集,我却连交集、并集和另一个差集一起算,不慢才怪!
于是把差集分出来,见附件set_dif函数。


以前我还试过从头开始写Krigging插值法和EMD分解,
前者我很快放弃了,因为IDL有现成的krig2D函数,后来发现python也有这个包,
而EMD分解我陆续写了很多天还没调整好,主要卡在端点问题上,后来发现python有现成的,网上说matlab也有这个算法,那我还费那个劲干嘛,吃力不讨好。



set_cal.pro

3.8 KB, 下载次数: 0, 下载积分: 金钱 -5

dif_set.pro

1.19 KB, 下载次数: 0, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-6-15 10:09:31 | 显示全部楼层
python的集合运算

集合是python的基本数据结构,这比IDL简单多了
显然,python集合支持的数据类型是很丰富的,标量、多维矢量、字符等等都行!


x=[(1,2),(3,4),(2,3),(3,4)]
y=[(1,2),(2,3),(2,3),(2,4)]
print('x=',x)
print('y=',y)
print('x的集合=',set(x))
print('y的集合=',set(y))
print('交集=',set(x)&set(y))
print('并集=',set(x)|set(y))
print('并集=',set(x)-set(y))


x={'a','b','c'}
y={'b','c','d'}
print('交集=',set(x)&set(y))
print('并集=',set(x)|set(y))
print('并集=',set(x)-set(y))


x={1,2}
y={3,4}
if not x&y:
    print('空集')



输出:
x= [(1, 2), (3, 4), (2, 3), (3, 4)]
y= [(1, 2), (2, 3), (2, 3), (2, 4)]
x的集合= {(1, 2), (3, 4), (2, 3)}
y的集合= {(1, 2), (2, 3), (2, 4)}
交集= {(1, 2), (2, 3)}
并集= {(1, 2), (2, 3), (3, 4), (2, 4)}
并集= {(3, 4)}
交集= {'c', 'b'}
并集= {'c', 'a', 'd', 'b'}
并集= {'a'}
空集

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-15 10:29:48 | 显示全部楼层

数组转集合


IDL剔除重复元素的方法:
function element,x
;x=[[1,2,1,3,3],[1,2,1,3,3]]
p=sort(x)
x2=x[p]
return,x2[uniq(x2)];一定要排序,uniq函数才能把不同的元素识别出来
end



python的方法:
x=[1,2,2,3,3,4]
print(set(x))

结果: {1, 2, 3, 4}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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