可使用工具包

  • pylandstats

    • 此工具包基本是根据fragstats形成的,大部分fragstats里面的景观指数,这里都可以计算。但是,还是有一小部分指数这里没有涉及。
  • LS_METRICS

自定义的aggregation index(AI)计算

原理

\[AI=\frac{e_{ii}}{max\_e_{ii}}\times100
\]
  • 这里的\(e_{ii}\)是同类型像元公共边的个数

  • \(max\_e_{ii}\)是同类型像元最大公共边的个数, \(max\_e_{ii}\)的计算有公式可寻,具体计算公式如下:

    \[\begin{align*}
    & max\_eii = 2n(n-1), & when \quad m = 0, or\\
    & max\_eii = 2n(n-1) + 2m -1, & when\quad m ≤ n, or\\
    & max\_eii = 2n(n-1) + 2m -2, & when \quad m > n.\\
    \end{align*}
    \]
    • n为不超过某个类型像元总面积\(A_i\)的最大整数正方形的边长

    • m=\(A_i-n^2\)

实例

  • 例如图a中类型1的聚居指数AI可为:
    \[\begin{align*}
    &e_{ii}=12\\
    &max\_e{ii}=2n(n-1)=2\times3\times2=12\\
    &AI=\frac{e_{ii}}{max\_e{ii}}\times100=100
    \end{align*}
    \]

    这里AI为100是因为这里乘了一个系数100;

Python实现

  • 函数依赖关系

class AI(Landscape, ABC):
def __init__(self, landscape, **kwargs):
super().__init__(landscape, **kwargs)
# 用于计算每种类型公共边的数量
def get_share_edge(self, class_):
# 1.将数据转换为二值型
binary_data = (self.landscape_arr == class_).astype(np.int8)
# 2.设置卷积模板
cov_template = np.array([[0, 0, 0],
[0, 0, 1],
[0, 1, 0]])
# 3.填充边缘
binary_pad = np.pad(binary_data, 1, mode='constant', constant_values=0)
# 4.计算公共边总数
row_num, col_num = binary_pad.shape
count = 0
for i in range(1, row_num - 1):
for j in range(1, col_num - 1):
if binary_pad[i, j] == 1:
count += np.sum(binary_pad[i - 1:i + 2, j - 1:j + 2] * cov_template)
return count # 计算eii
@property
def eii(self):
return pd.Series([self.get_share_edge(class_) for class_ in self.classes], index=self.classes)
# 计算最大的eii
@property
def max_eii(self):
arr = self.landscape_arr
flat_arr = arr.ravel()
# 规避nodata值
if self.nodata in flat_arr:
a_ser = pd.value_counts(flat_arr).drop(self.nodata).reindex(self.classes)
else:
a_ser = pd.value_counts(flat_arr).reindex(self.classes)
n_ser = np.floor(np.sqrt(a_ser))
m_ser = a_ser - np.square(n_ser)
max_eii = pd.Series(index=a_ser.index)
for i in a_ser.index:
if m_ser[i] == 0:
max_eii[i] = (2 * n_ser[i]) * (n_ser[i] - 1) elif m_ser[i] <= n_ser[i]:
max_eii[i] = 2 * n_ser[i] * (n_ser[i] - 1) + 2 * m_ser[i] - 1 elif m_ser[i] >= n_ser[i]:
max_eii[i] = 2 * n_ser[i] * (n_ser[i] - 1) + 2 * m_ser[i] - 2 return max_eii
# 计算AI指数
def aggregation_index(self, class_val=None):
"""
计算斑块类型的聚集指数AI
:param class_val: 整型,需要计算AI的斑块类型代号
:return: 标量数值或者Series
"""
if len(self.classes) < 1:
warnings.warn("当前数组全是空值,没有需要计算的类型聚集指数",
RuntimeWarning,
)
return np.nan
if class_val is None:
return (self.eii / self.max_eii) * 100
else:
return ((self.eii / self.max_eii) * 100)[class_val]

如何利用Python计算景观指数AI的更多相关文章

  1. 利用Python计算π的值,并显示进度条

    利用Python计算π的值,并显示进度条  第一步:下载tqdm 第二步;编写代码 from math import * from tqdm import tqdm from time import ...

  2. 利用python计算windows全盘文件md5值的脚本

    import hashlib import os import time import configparser import uuid def test_file_md5(file_path): t ...

  3. 利用python计算多边形面积

    最近业务上有一个需求,给出多边形面积. Google了一下,发现国内论坛给的算法都是你抄我我抄你,也不验证一下是否正确, 从 博客园到csdncsdn 然后传播到国内各个角落...真是无力吐槽了. 直 ...

  4. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  5. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

  6. 利用 Python 尝试采用面向对象的设计方法计算图形面积及周长

    利用 Python 尝试采用面向对象的设计方法.(1)设计一个基类 Shape:包含两个成员函数:def cal_area(): 计算并返回该图形的面积,保留两位小数:def cal_perimete ...

  7. 利用Python进行数据分析_Pandas_汇总和计算描述统计

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. In [1]: import numpy as np In [2]: impo ...

  8. 利用Python科学计算处理物理问题(和物理告个别)

    背景: 2019年初由于尚未学习量子力学相关知识,所以处于自学阶段.浅显的学习了曾谨言的量子力学一卷和格里菲斯编写的量子力学教材.注重将量子力学的一些基本概念了解并理解.同时老师向我们推荐了Quant ...

  9. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

随机推荐

  1. H5性能分析

    一.所有的浏览器都会支持一个W3C的标准 具体标准可以查看:https://www.w3.org/TR/navigation-timing/ 资源加载指标分析: Prompt for unload:访 ...

  2. centos7基于luks对磁盘进行加密

    centos7基于luks对磁盘进行加密 1,504 views A+ 所属分类:linux 收  藏 LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它 ...

  3. LVM 相关知识

    LVM 相关知识 一.示例图 二.概念 名词 全称 释义 PV Physical Volume 物理硬盘.硬盘分区或者RAID磁盘阵列,先要创建pv VG Volume Group 卷组建立在物理卷之 ...

  4. 命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。这三种时间的区别将在下面的touch命令中详细详解:

    7.stat命令 stat命令用于查看文件的具体存储信息和时间等信息,格式为"stat 文件名称". stat命令可以用于查看文件的存储信息和时间等信息,命令stat anacon ...

  5. 【Java】Files.readAllBytes(Path) 遇见的坑

    Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出. 在针对大文件的读取的时候,可能会出现内存不 ...

  6. 手机POS机

    资质查询 http://www.pbc.gov.cn/zhengwugongkai/127924/128041/2951606/1923625/1923629/d6d180ae/index4.html ...

  7. Ajax向服务器端发送请求

    Ajax向服务器端发送请求 Ajax的应用场景 页面上拉加载更多数据 列表数据无刷新分页 表单项离开焦点数据验证 搜索框提示文字下拉列表 Ajax运行原理 Ajax 相当于浏览器发送请求与接收响应的代 ...

  8. HUAWEI防火墙通过L2TP隧道让外出员工访问公司内网的各种资源

    组网图形 组网需求 企业网络如图所示,企业希望公司外的移动办公用户能够通过L2TP VPN隧道访问公司内网的各种资源. 操作步骤 配置LNS. 1.配置接口IP地址,并将接口加入安全区域. <L ...

  9. Apple iWork(Pages、Numbers、Keynote)11.0 发布

    苹果今天将其专为 iOS 和 macOS 设备设计的 iWork 应用套件更新为版本 11,引入了许多新功能和改进功能. Pages 文稿. 文档高手,精美不言而喻. 进一步了解 Pages 文稿 & ...

  10. 缩放 transform

    转换属性 transform 转换是css3中的一个特征,可以实现元素的缩放,位移,变形. 作用: 使元素在位置或者形状上发生一定的改变. 属性: transform 属性值: scale:缩放(一般 ...