GEE必须会教程—邂逅线代中的矩阵(Array类型)

矩阵,一个令人头疼的名字,学过线性代数的友友们想必对矩阵的运算规则烂熟于心,与它延申出来的向量知识曾经让我们深陷其中。矩阵在高级的数据存储中占据着重要的地位。定义字典类型的过程,其实就是寻找key和value关系的过程,定义list的过程,其实就是存储各类数据的过程,而定义矩阵的过程,和list有点关系,我们看成是将list方向化。今天我们看看,GEE上,如何对矩阵进行一系列操作。

1.定义矩阵数据

//定义一个二维数组
var array1 = ee.Array([[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9],[5,6,7,8,9,10],[6,7,8,9,10,11]]);
print("Array1:",array1);

为了方便大家理解代码,小编多敲了几个换行,此处定义了一个6*6的矩阵,通过ee.Array([[......],[......],.....])进行矩阵的定义。如果小编要定义2*4的矩阵或者是4*2的矩阵,应该如果写参数?

var A1 = ee.Array([[1,2,3,4],[2,3,4,5]]);//2*4
var A2 = ee.Array([[1,2],[2,3],[3,4],[4,5]]);//4*2
print("2*4:",A1,"4*2",A2);

结果如下:

2.创建单位矩阵

//创建单位矩阵
var arrayId = ee.Array.identity(6);
print("arrayId:",arrayId);

单位矩阵在是矩阵的基本单元,支撑了矩阵的多种运算技巧。在GEE上通过使用:

ee.Array.identity(number)

可以创建number*number规格的单位矩阵,此处小编创建了6*6的单位矩阵。结果如下:

3.创建重复矩阵

//创建重复矩阵
var arrayRe0 = ee.Array([[1,2,3],[2,3,4]]).repeat(0,2);
var arrayRe1 = ee.Array([[1,2,3],[2,3,4]]).repeat(1,2);
print("arrayRe0:",arrayRe0,"arrayRe1",arrayRe1);

创建重复矩阵可以将同一行或者是同一列进行复制,使用:

ee.Array.repeat(axis,count)

即按照指定的坐标轴进行矩阵内容的复制,这里的轴包括0轴和1轴,其中0轴代表行轴,1轴代表列轴,count指的是要复制的次数。此处小编首先想围绕给定的0轴按行进行复制2次,其次,小编想通过按列轴的形式,对矩阵的两列复制两次,最后得到的结果如下:

4.矩阵的四则运算

//进行加减乘除四则运算
var array2 = ee.Array([[1,2],[2,3]]);
var array3 = ee.Array([[2,4],[4,6]]);
print("add:",array2.add(array3));
print("subtract:",array2.subtract(array3));
print("divide:",array3.divide(array2));
print("multiply:",array2.multiply(array3));

矩阵的四则运算比较简单,和Number数据类型的运算类似,分别采用add,subtract,divide,multiply即可完成相应的运算。

5.对矩阵的某一列或者某一行进行计算

//对某一行(0轴)或某一列(1轴)进行计算
var array4 = ee.Array([[1,2,3,4],[4,3,4,5],[3,4,5,6],[8,5,6,7]]);
print("aXis 0:",array4.reduce(ee.Reducer.sum(),[0]));//传入0轴(行轴),计算每一列和
print("aXis 1:",array4.reduce(ee.Reducer.sum(),[1]));//传入1轴(列轴),计算每一行和

此处小编定义了一个4*4的矩阵,合理运用:

ee.Array.reduce(Reducer,axls)

可以单独对矩阵的行和列进行计算,通过传入0轴,我们能够每一列的和,通过传入列轴,我们能够得到每一行的和。计算的结果如下:

6.矩阵的掩膜

//矩阵的掩膜
var array5 = ee.Array([[1,1,1],[2,3,4],[5,6,7],[1,1,1]]);
var array6 = ee.Array([[1],[0],[1],[0]]);
print("array5:",array5,"array6",array6);
print("Mask:",array5.mask(array6));

掩膜的作用是保留想要的矩阵的部分,此处下边定义了一个4*3的矩阵,想保留第一行和第三行的数据,因此在掩膜矩阵定义的4*1矩阵中,将第一行和第三行设置为1,第二行和第四行设置为0,这样便能够保留第一行和第三行的数据了。其他行或列的保留大家可以模仿试试看。

7.矩阵的转置

//矩阵的转置
var array7 = ee.Array([[1,1,1],[2,3,4],[5,6,7],[1,1,1]]);
print("array7:",array7);
print("transpose:",array7.transpose());

矩阵的转置即原行变新列,原列变新行的过程,它和原矩阵之间存在微妙的关系,我们在线代中已经学过。在GEE中使用:

ee.Array.transpose()

可以实现矩阵的转置,得到的结果如下:

8.矩阵内元素格式的转换

//矩阵内元素的数据格式转换
var array8 = ee.Array([[1.3,4.5,6.8],[5.27,4.22,6.08]]);
print("array8:",array8);
var transform = array8.uint8();
print("Transfrom:",transform);

遇见小数的矩阵,总想转为正数,使用:

ee.Array.uint8

即可按照四舍五入的原则进行数据的转换,除此之外,还有很多数据类型的转换方法,大家可以查阅GEE上封装的相关方法,用起来都差不多,篇幅原因,就不一一介绍啦!

9.矩阵的交并运算

//矩阵的交并操作
var array11 = ee.Array([[2,0,2],[0,1,3],[4,2,0]]);
var array12 = ee.Array([[3,1,0],[1,1,2],[0,1,0]]);
print("Array11:",array11,"Array12:",array12);
print("ArrayAnd:",array11.and(array12));
print("ArrayOr:",array11.or(array12));

交并我们在在前面的数据集中已经聊过,最后返回的数据比较简单,就是0和1,and和or也是常见的方法,这里就只展示结果哈!

10.矩阵的比较

//矩阵的比较方法,对应元素比较,得0或1;
var array9 = ee.Array([[1,2,3,4],[4,3,4,5],[3,4,5,6],[8,5,6,7]]);
var array10 = ee.Array([[1,2,5,6],[4,5,8,1],[2,4,6,6],[8,5,6,9]]);
print("array9:",array9,"array10",array10);
var compare = array9.eq(array10);
print("Compare:",compare);

矩阵的比较主要是判断两个矩阵是否相等,通过对应元素一一eq,返回1或0来确定,1代表两个矩阵的对应元素相等,0代表两个矩阵的元素不同。此处小编定义两个矩阵进行判断,得到的结果如下所示:

关于GEE的矩阵的基本操作到这里就结束了,如果对你学习有帮助,不要忘记了给小编点赞哦!更多内容,欢迎关注小编的公众号“梧桐凉月”,谢谢大家!

本期代码链接:

https://code.earthengine.google.com/d43d5b7e413d72121fdc35ab00b6690dicon-default.png?t=N7T8https://code.earthengine.google.com/d43d5b7e413d72121fdc35ab00b6690d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统——Nginx服务状态码总结

目录 一、1xx状态码 100 Continue 101 Switch Protocols 102 Processing 二、2xx状态码 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information 204 No Content 205 Reset Content 206 Partial Content 207 Multi-Status 208 Already Reported 三…

Upload-Labs-Linux1【CTF】

拿到这道题目一看&#xff0c;发现是upload靶场&#xff1b;这不简简单单吗&#xff1b;结果中间还是遇到了一些小问题 小坑总结&#xff1a;该关只识别标准php语法&#xff1a;<?php phpinfo()?>格式&#xff1b;即<?php ?> 不识别<? phpinfo()?> &…

怎么在wifi中实现手机和电脑文件互传

有时我们想手机电脑文件互传&#xff0c;数据线却不在身边&#xff0c;这时我们可以用MiXplorer来实现wifi中手机和电脑互相访问文件。 MiXplorer是一款来自著名安卓开发者论坛XDA的作品&#xff0c;免费且功能强大&#xff0c;被很多人誉为是“全能文件管理器”。 1.在手机上…

程序环境和预处理(1)

文章目录 目录1. 程序的翻译环境和执行环境2. 详解编译链接2.1 翻译环境2.2 编译本身也分为几个阶段2.3 运行环境 3. 预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##3.2.5 带副作用的宏参数3.2.6 宏和函数…

数据结构链表力扣例题AC(3)——代码以及思路记录

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 AC写法一 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//思…

DBAPI如何使用数组类型参数

DBAPI如何使用数组类型参数 需求 根据多个id去查询学生信息 API创建 在基本信息标签&#xff0c;创建参数ids &#xff0c;参数类型选择 Array<bigint> 在执行器标签&#xff0c;填写sql&#xff0c;使用in查询 select * from student where id in <foreach ope…

推荐系统经典模型YouTubeDNN

文章目录 YouTubeDNN概念YouTubeDNN模型架构图YouTubeDNN召回阶段YouTubeDNN层级介绍 YouTubeDNN排序阶段YoutubeDNN模型中的一些Trick负采样问题特征构造上下文选择 总结 YouTubeDNN概念 YouTubeDNN是YouTube用于做视频推荐的落地模型&#xff0c;其大体思路就是召回阶段使用…

33.云原生之Istio管理任何七层流量

云原生专栏大纲 文章目录 Istio存在的问题Aeraki介绍Aeraki 的解决方案支持的协议支持的特性 安装AerakiAeraki教程采用 ServiceEntry 的 Demo 应用使用 Dubbo2Istio 对接 Dubbo 注册表 的 Demo 应用&#xff08;Interface 级流量治理&#xff09; Service Mesh 中有大量的七层…

2024年全国乙卷高考文科数学备考:历年选择题真题练一练(2014~2023)

今天距离2024年高考还有三个多月的时间&#xff0c;今天我们来看一下2014~2023年全国乙卷高考文科数学的选择题&#xff0c;从过去十年的真题中随机抽取5道题&#xff0c;并且提供解析。后附六分成长独家制作的在线练习集&#xff0c;科学、高效地反复刷这些真题&#xff0c;吃…

【C语言】linux内核ipoib模块 - ipoib_ib_post_receive

一、中文注释 用于以太网接口&#xff08;InfiniBand&#xff09;上的IP over IB&#xff08;IPoIB&#xff09;设备的Linux内核函数&#xff0c;负责将接收缓冲区&#xff08;一个包&#xff09;提交到网络设备的队列中等待数据到达。下面是中文注释版本的函数代码&#xff1…

国家建筑装配式内装产业基地在沪成立,副主任单位优积科技协同助推绿色低碳循环发展

上海市室内装饰行业协会装配式内装产业专业委员会成立大会暨“国家建筑装配式内装产业基地”项目启动会于3月21日下午1点在上海光大酒店隆重举行。出席此次活动的包括市装协会长徐国俭&#xff0c;市装协党支部书记兼秘书长丛国梁&#xff0c;市装协装配式内装委主任顾泰昌&…

内容安全补充

第十一天 密码学 近现代加密算法 古典加密技术 --- 算法保密原则 近现代加密技术 --- 算法公开&#xff0c;密钥保密 对称加密算法&#xff0c;非对称加密算法 对称加密 --- 加密和解密的过程中使用的是同一把密钥。 所以&#xff0c;对称加密所使用的算法一定是一种双向…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了vue框架。该系统从三个对象&#xff1a;由管理员和用户、店铺来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户、店铺、二…

【RN】为项目使用React Navigation中的navigator

简言 移动应用基本不会只由一个页面组成。管理多个页面的呈现、跳转的组件就是我们通常所说的导航器&#xff08;navigator&#xff09;。 React Navigation 提供了简单易用的跨平台导航方案&#xff0c;在 iOS 和 Android 上都可以进行翻页式、tab 选项卡式和抽屉式的导航布局…

如何在 Tomcat 中为 Web 应用程序启用和配置缓存?

在Tomcat中为Web应用程序启用和配置缓存通常涉及到对Tomcat的连接器&#xff08;Connector&#xff09;进行配置&#xff0c;以及可能的话&#xff0c;配置Web应用程序本身以支持缓存。 1. 配置Tomcat连接器以启用缓存 Tomcat的连接器可以通过其配置来启用各种…

软考-中级-系统集成2023年综合知识(三)

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 软考中级专栏回顾 专栏…

C#学习总结

1、访问权限 方法默认访问修饰符&#xff1a;private 类默认访问修饰符&#xff1a;internal 类的成员默认访问修饰符&#xff1a;private 2、UserControl的使用 首先添加用户控件 使用时一种是通过代码添加&#xff0c;一种是通过拖动组件到xaml中

Stable Diffusion 绘画入门教程(webui)-ControlNet(IP2P)

上篇文章介绍了深度Depth&#xff0c;这篇文章介绍下IP2P&#xff08;InstructP2P&#xff09;, 通俗理解就是图生图&#xff0c;给原有图加一些效果,比如下图&#xff0c;左边为原图&#xff0c;右边为增加了效果的图&#xff1a; 文章目录 一、选大模型二、写提示词三、基础参…

RabbitMQ的死信队列和延迟队列

文章目录 死信队列如何配置死信队列死信队列的应用场景Spring Boot实现RabbitMQ的死信队列 延迟队列方案优劣&#xff1a;延迟队列的实现有两种方式&#xff1a; 死信队列 1&#xff09;“死信”是RabbitMQ中的一种消息机制。 2&#xff09;消息变成死信&#xff0c;可能是由于…

绿盾限制终端网络访问权限会恢复后,别的网站访问正常就是无法访问钉钉网站和下载东西

环境&#xff1a; Win10 专业版 钉钉7.5.5 绿盾7.0 问题描述&#xff1a; 绿盾限制终端网络访问权限会恢复后&#xff0c;别的网站访问正常就是无法访问钉钉网站和下载东西 解决方案&#xff1a; 排查方法 1.重置浏览器或者更换浏览器测试&#xff08;未解决&#xff09…