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

news2024/12/22 13:57:07

矩阵,一个令人头疼的名字,学过线性代数的友友们想必对矩阵的运算规则烂熟于心,与它延申出来的向量知识曾经让我们深陷其中。矩阵在高级的数据存储中占据着重要的地位。定义字典类型的过程,其实就是寻找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.coloradmin.cn/o/1467726.html

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

相关文章

OpenCV 4基础篇| OpenCV图像基本操作

目录 1. 图像读取1.1 cv2.imread() 不能读取中文路径和中文名称1.2 cv2.imdecode() 可以读取中文路径和中文名称 2. 图像的显示2.1 openCV显示图像 cv2.imshow()2.2 matplotlib显示图像 plt.imshow() 3. 图像的保存 cv2.imwrite()4. 图像的复制4.1 img.copy()4.2 np.copy()4.3 …

贪婪算法入门指南

想象一下,你在玩一款捡金币的游戏。在这个游戏里,地图中散布着各种大小不一的金币,而你的目标就是尽可能快地收集到最多的金币。你可能会采取一个直观的策略:每次都去捡最近的、看起来最大的金币。这种在每一步都采取局部最优解的…

ONLYOFFICE 桌面编辑器现已更新至v8.0啦

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

ETL:数据转换与集成的关键过程

ETL:数据转换与集成的关键过程 在现代数据驱动的世界中,有效地管理和处理数据对于企业的成功至关重要。ETL(提取、转换、加载)是一种关键的数据处理过程,有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

【LeetCode-337】打家劫舍III(动态规划)

目录 题目描述 解法1:动态规划 代码实现 题目链接 题目描述 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“…

华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)---Python3--开源

题目: 考察内容: for if max 代码: """ 题目分析:投资额*回报率投资回报 要在可接受范围内选择最优的投资方式获得最大回报最多投资2个理财产品输入: 产品数int; 总投资额int; 总风险int 产品投资…

[word] 怎么把word表格里的字放在正中间? #职场发展#知识分享#知识分享

怎么把word表格里的字放在正中间? word表格中文字在中间的处理方式如下: 1、在表格中选择需要居中的文字的单元格,具体如下图。 2、全选后,鼠标在工具栏中找到:对齐方式,点击它后面的倒三角,如…

Vue学习之计算属性

模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。比如说,我们有这样一个包含嵌套数组的对象: const author reactive({name: John Doe,books: [Vue 2 - Advan…

P1927 防护伞

题目传送门:P1927 防护伞 作业出了这道题,写一篇题解纪念一下。 这道题可以简化为“先枚举所有点,然后把这些点到另外点距离的最大距离和其他点比较,求出最小距离”。 这样说可能也听不懂,还可以再简化: …

【SpringBoot3】Spring Security 常用配置总结

注:本文基于Spring Boot 3.2.1 以及 Spring Security 6.2.1 相关文章 【SpringBoot3】Spring Security 核心概念 【SpringBoot3】Spring Security 常用注解 【SpringBoot3】Spring Security 详细使用实例(简单使用、JWT模式) 【SpringBoot3】…

Docusaurus框架——快速搭建markdown文档站点介绍sora

文章目录 ⭐前言⭐初始化项目💖 创建项目(react-js)💖 运行项目💖 目录文件💖 创建一个jsx页面💖 创建一个md文档💖 创建一个介绍sora的文档 ⭐总结⭐结束 ⭐前言 大家好&#xff0…

智能风控体系之PagePank算法应用

PageRank算法,即网页排名算法,由Google创始人Larry Page在斯坦福上学的时候提出来的。该算法用于对网页进行排名,排名高的网页表示该网页被访问的概率高。PageRank算法计算每一个网页的PageRank值,然后根据这个值的大小对网页的重…

Linux笔记之LD_LIBRARY_PATH详解

Linux笔记之LD_LIBRARY_PATH详解 文章目录 Linux笔记之LD_LIBRARY_PATH详解1.常见使用命令来设置动态链接库路径2.LD_LIBRARY_PATH详解设置 LD_LIBRARY_PATH举例注意事项 3.替代方案使用标准路径编译时指定链接路径优先使用 rpath 还是 runpath?注意事项 1.常见使用…

高级RAG:重新排名,从原理到实现的两种主流方法

原文地址:https://pub.towardsai.net/advanced-rag-04-re-ranking-85f6ae8170b1 2024 年 2 月 14 日 重新排序在检索增强生成(RAG)过程中起着至关重要的作用。在简单的 RAG 方法中,可以检索大量上下文,但并非所有上下…

Android 解决后台服务麦克风无法录音问题

Android 解决后台无法录音问题 问题分析问题来源解决方案1. 修改清单文件:`AndroidManifest.xml`2. 修改启动服务方式3. 服务启动时创建前台通知并且指定前台服务类型参考文档最后我还有一句话要说我用心为你考虑黄浦江的事情,你心里想的却只有苏州河的勾当 问题分析 安卓9.…

NPM私服搭建(verdaccio)

官网地址:https://verdaccio.org/ 概述 Verdaccio 是一个流行的 Node.js 包管理器的代理工具,它允许您在本地或私有网络上轻松地创建和管理 npm 包仓库。通过 Verdaccio,开发团队可以建立自己的 npm 包仓库,以更好地控制和管理其依…

Linux:Jenkins:GitLab+Maven+Jenkins的部署

1.环境 我这里准备了三台centos7 1.用于部署gitlab 运行内存:6G 名字:Jenkins-GitLab 192.168.6.1 2.用于部署jenkins 运行内存:2G 名字:Jenkins-server 192.168.6.2 3.用于打包测试…

设计模式——三大工厂模式

工厂模式 简单工厂模式(静态工厂模式) 介绍: 1、简单工厂模式是属于创建型模式,是工厂模式的一种,**简单工厂模式是由一个工厂对象决定创建出哪种产品的实例**。是工厂模式中最简单使用的模式 2、简单工厂模式&#…

ONLYOFFICE8.0——赋能办公

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-xdAoM2pHRmDFP0tF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

挑战30天学完Python:Day18 正则表达式

📘 Day 18 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…