NJU1healer的个人博客分享 http://blog.sciencenet.cn/u/NJU1healer

博文

GEE -- Reducer 和 数据类型(Dictionary,List,Array)

已有 4452 次阅读 2020-7-9 17:24 |个人分类:Google earth engine|系统分类:科研笔记

(一)Reducer

image.png


1. Reducer OverviewReduce是用来处理图像集合的重要工具, 这个类中的reduce可以指定一个简单的统计量用于汇总(例如,最小值,最大值,平均值,中位数,标准偏差等),或者更复杂的输入数据汇总(例如直方图,线性回归,列表),下面这张图可以比较好的说明reducer的作用:

image.png

2. 图的针对ImageCollection时的ee.Reducer()

image.png

3. Statistics of an Image Region

这里的reduction和之前的稍有差别,相比与之前的image stack的样子,这里的统计结果是这样的

image.png

进行统计的时候可以对像元尺度、像元数目等进行处理

4. Statistics of Image Neighborhoods

这种统计方法的示意图如下

image.png

(二)GEE数据类型—Dictionary,List,Array

文本和数字的功能是进行描述和数据储存,而Dictionary,List和Array可以看作是文本和数字间通过不同结合形式而形成的新的数据类型。简单的说,Dictionary,List和Array是拥有了一定“格式”的文本或数字

1 Dictionary

//创建一个字典变量
var Dictionary_Profile = ee.Dictionary( {
Name: 'Mary',
Gender: 'Female',
Age: '> 30',
Location: 'Beijing'
} );
//冒号左边是关键词(Key),它就是变量,所以不需要加引号,冒号右边是关键词对应的内容(content)
//有相同 Key 字典变量组合后 true 在合并的字典中就会将重复的内容保留为第二个变量的值,false反之
var Dict_Combine = Dict_1.combine( Dict_2, true );
//字典内容更改
var Dict_Change = Dict_1.set('Age', '<30' );
//字典管检测陈列
var List_Keys= Dict_1.keys( );
print( List_Keys);
var The_Name = Dict_1.get('Name' );//单字段信息读取
var The_Values = Dict_1.values(['Name','Age','Location' ]);//多字段查询
var The_Contain = Dict_1.contains('Hight');//查询括号内的关键词是否存在于字典
var The_Size = Dict_1.size();//尺寸查询

2 List

List主要用来存储一系列数据,这些数据可以由不同的格式(比如数字,文本,字典等)组成。我们可以把List理解为“文件夹”,用来在GEE的代码中存储各种数据。

List内部通过逗号“,”来分割空间,同时其中的每一个空间都可以用来存储任意数据格式(包括遥感图像和矢量文件)的数据

var List_Example = ee.List( [1,2,3,'A','B','C',['Hello','Good','Bye']] );
//第7个位置(编号为6的位置是第七位)是另一个List
var List_Repeat = ee.List.repeat( 'Yeah!', 5 );//重复创建List
var List_Sequence= ee.List.sequence( 0, 9, 1 , null );//等差创建List
//分别代表等差数列的“首部数字”,“尾部数字”,“公差”和“项数”,其中“公差”和“项数”只能存在一个
///借助Docs查询
var List_1 = ee.List( [1992,01,20,'No.1'] );
var List_2 = List_1.set(0,1993);//两个参数分别表示“改写位置”和“改写内容”
var List_3 = List_1.set(-1,'No.2');//
var List_2 = List_1.replace(01,05);//替换第一个出现的01
var List_3 = List_1.replaceAll(01,05);//替换所有
var List_2 = List_1.add('Male');//末尾添加
var List_3 = List_1.insert(3,'Chongqing');//第四个位置插入
var List_1 = ee.List( [1992,01,20,'No.1']);//对应位置的元素打包到子数组中
var List_2 = List_1.zip(['Year','Month','Day']);
var List_Reverse = List_1.reverse( );//元素位置倒转
var List_Rotate = List_1.rotate(5);//以List_1的对称中心为中点进行180度翻转
var List_Sort = List_1.sort( );//排序
var List_2 = List_1.swap( 5,8 );//交换位置处元素
var List_2 = List_1.flatten( );//将List中的元素铺平到一位列表中
var List_1 = ee.List([1,1,2,2,3,3,4,4,5,5])
var List_2 = List_1.get(3);
var List_3 = List_1.remove(3);//删除第三个元素
var List_4 = List_1.removeAll([3,4]);//删去所谓值为3和4的元素
//判断等于与包含
var True_False_1 = List_1.equals( List_2 );
var True_False_2 = List_1.contains('li');
var True_False_3 = List_1.containsAll(List_3);
//5在List中出现的频率
var Frequency_Number = List_Number.frequency(5)
//Do是一个函数
var List_2 = List_1.map( Do );
//尺寸计算 相同
var Length_Number_1 = List_1.size( );
var Length_Number_2 = List_1.length( );

理解.map命令的作用是对List中的每一个对象(Object)都执行了某种相同的操作,这种相同的操作由function命令进行编写

List的循环命令

//求1-1000自然数的和
var List_1 = ee.List.sequence(1,1000,1);
function Do ( Number_1, Number_2 )
{ return ee.Number(Number_1).add(Number_2);
}
var List_2 = List_1.iterate( Do, 0 );
print( List_1, List_2 );

理解.iterate()命令有两个参数,第一个参数是执行循环要执行的参数方程,第二个是循环的初始量就行。

3 Array

“数组,阵列,矩阵”,其本质上仍属于List的范畴。作为高阶遥感分析中的核心数据格式(使用Array会灵活很多),可以这样理解Array:“带有方向的List”,同时应该注意这种List只能由数字构成。

  把方括号外的(List间)逗号想象成换行键按下后的效果

var Array_1 = ee.Array( [[1], [2], [3]]); //3*1
var Array_2 = ee.Array( [[1, 2, 3]]); //1*3
print( Array_1,Array_2 );
var Array_1 = ee.Array.identity( 5 );//单位矩阵 对角线为1 其余为0

矩阵的重复

.repeat( , )的作用是将原矩阵沿着某个方向重复若干次,其中第一个参数是重复方向,第二个参数是拷贝个数。

矩阵重复

var Array_1 = ee.Array([ [ 1,2,3 ],[ 4,5,6 ] ]);
var Array_2 = Array_1.repeat( 1,2 );

矩阵的掩膜命令

var Array_1 = ee.Array( [ [1,1],[2,2],[3,3],[4,4]] );
var Array_2 = ee.Array( [ [ 0],[ 0],[ 1],[ 0]] );
var Array_3 = Array_1.mask( Array_2 );
print( Array_1, Array_2, Array_3 );

矩阵的倒置命令

var Array_1 = ee.Array( [ [111,111,111],
[222,222,222] ]);
var Array_2 = Array_1.transpose();
var Array_3 = Array_2.transpose()
print( Array_1, Array_2,Array_3);

矩阵的数据转换

var Array_1 = ee.Array( [ [1.1, 2.2, 3.3], [4.4, 5.5, 6.6] ] );
var Array_2 = Array_1.uint8();
print( Array_1, Array_2 );

矩阵的比较

相等处的元素为1,不等为0

var Array_1 = ee.Array( [ [1,1],[2,2],[3,3],[4,4]] );
var Array_2 = ee.Array( [ [1,2],[3,4],[4,3],[2,1]] );
var Array_3 = Array_1.eq( Array_2 );
print( Array_1, Array_2, Array_3 );

矩阵的交并

var Array_1 = ee.Array( [ [1,0],[0,0],[3.14,1.41]] );
var Array_2 = ee.Array( [ [1,2],[0,0],[3,4]] );
var Array_and = Array_1.and( Array_2 );
var Array_or = Array_1.or( Array_2 );
print( Array_1, Array_2, Array_and, Array_or );

矩阵的函数命令(类似的命令参照Number部分)

var Array_1 = ee.Array( [-3.14, 1.414] );
var Array_2 = Array_1.ceil().abs();

矩阵的数学命令(位运算 移位等类似参照number,不过是多了几行几列的元素)

var Array_1 = ee.Array( [ [1,2,3,4] ] );
var Array_2 = ee.Array( [ [5,6,7,8] ] );
var Result_Array = Array_1.add(Array_2);
print ( Array_1, Array_2, Result_Array );



【参考】

https://zhuanlan.zhihu.com/p/129367989

点滴分享,福泽你我!Add oil!



https://blog.sciencenet.cn/blog-3428464-1241307.html

上一篇:[转载]我国常用地图投影
下一篇:GEE -- 数据类型(String,Number )
收藏 IP: 45.146.122.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-28 01:40

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部