简单的python格网算法算数据密集度demo
# 格网算法计算数据集区域数据密集度
import time
import random
import numpy as np
import pandas as pd
# 模拟数据集
def create_data():
data_x = []
data_y = []
data = []
for i in range(300000):
x = random.randrange(0, 300000)
y = random.randrange(-1500, 1500)
data_x.append(x)
data_y.append(y)
data.append([x, y])
return data_x, data_y, data
# 计算网格数据密集度
def calculate_density(gridSize, bounds):
data_x, data_y, data = create_data()
# 计算网格边界
x = np.arange(bounds[0][0],
bounds[1][0] + gridSize,
gridSize)
y = np.arange(bounds[0][1],
bounds[1][1] + gridSize,
gridSize)
# 使用pandas构建网格
grid = pd.DataFrame(0, index=x[:-1], columns=y[:-1])
# 将数据分配到网格中
for point in data:
if point[0] < bounds[0][0] \
or point[0] > bounds[1][0] \
or point[1] < bounds[0][1] \
or point[1] > bounds[1][1]:
continue
# 计算数据在那个网格内
x_index = int((point[0] - bounds[0][0]) // gridSize)
y_index = int((point[1] - bounds[0][1]) // gridSize)
# 将网格计数 +1
grid.iloc[x_index, y_index] += 1
# 计算每个网格的密度
densities = grid.to_numpy() / (gridSize * gridSize)
# 将密度添加到数据中
for point in data:
if point[0] < bounds[0][0] \
or point[0] > bounds[1][0] \
or point[1] < bounds[0][1] \
or point[1] > bounds[1][1]:
continue
# 计算数据在那个网格内
x_index = int((point[0] - bounds[0][0]) // gridSize)
y_index = int((point[1] - bounds[0][1]) // gridSize)
point.append(densities[x_index, y_index])
return densities, data
if __name__ == "__main__":
start_time = time.time()
densities, data = calculate_density(100,
[[0, -1500], [300000, 1500]])
end_time = time.time()
print("消耗的时间:", end_time - start_time)
print(densities)
// 生成模拟数据集
function createData() {
let data = []
for (i = 0; i < 10000; i++) {
let data_y = (Math.random() - Math.random())
let data_x = i
data.push([data_x, data_y])
}
return data
}
// 计算最大值
function getMax(data){
let len = data.length
let max = -Infinity
while(len--){
max = data[len] > max ? data[len] : max
}
return max
}
// 计算最小值
function getMin(data){
let len = data.length
let min = Infinity
while(len--){
min = data[len] < min ? data[len] : min
}
return min
}
// 计算区域数据密集度
function calculateDensity(gridSize){
let data = createData()
let x = data.map(v => v[0])
let y = data.map(v => v[1])
// 计算数据极值
// min和max在数据量大时崩溃,125519
// let min_x = Math.min(...x)
// let max_x = Math.max(...x)
// let min_y = Math.min(...y)
// let max_y = Math.max(...y)
let min_x = getMin(x)
let max_x = getMax(x)
let min_y = getMin(y)
let max_y = getMax(y)
// 计算数据区域范围
let width = max_x - min_x
let height = max_y - min_y
// 计算宽高的分段数
let x_count = data.length / 100
let y_count = 100
let x_gridSize = width / (x_count - 1)
let y_gridSize = height / (y_count - 1)
// 创建嵌套数组模拟二维数组构建网格
let counts = Array.from(Array(x_count), () => Array.from(Array(y_count), () => new Array(3).fill(0)))
console.log(counts)
data.forEach((v) => {
if(v[0] < min_x || v[0] > max_x || v[1] < min_y || v[1] > max_y){
return
}
// 计算数据所在的区域坐标
let x_index = Math.floor((v[0] - min_x) / x_gridSize)
let y_index = Math.floor((v[1] - min_y) / y_gridSize)
counts[x_index][y_index][2] += 1
})
let densities = counts.map((count, x_index) => count.map((v, y_index) => {
v[2] /= gridSize
v[0] = x_index
v[1] = y_index
return v
}))
console.log(densities)
return densities
}
let start_time = Date.now()
calculateDensity(10)
let end_time = Date.now()
console.log('消耗的时间:', end_time - start_time)
简单的python格网算法算数据密集度demo的更多相关文章
- GIS可视化——热点格网图
一.简介 原理:按照格网大小将区域进行划分,由一个矩形格网替代当前范围内的数据,由格网中心数字代替格网的权重(可以为格网中数据的数量,数据某权重的平均值.最大值.最小值等), 由格网之间颜色的不同表达 ...
- 003.[python学习] 简单抓取豆瓣网电影信息程序
声明:本程序仅用于学习爬网页数据,不可用于其它用途. 本程序仍有很多不足之处,请读者不吝赐教. 依赖:本程序依赖BeautifulSoup4和lxml,如需正确运行,请先安装.下面是代码: #!/us ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- BootStrap入门教程 (一) :手脚架Scaffolding(全局样式(Global Style),格网系统(Grid System),流式格网(Fluid grid System),自定义(Customing),布局(Layouts))
2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...
- 以图搜图(一):Python实现dHash算法(转)
近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...
- 基于gdal的格网插值
格网插值就是使用离散的数据点创建一个栅格图像的过程.通常情况下,有一系列研究区域的离散点,如果我们想将这些点转换为规则的网格数据来进行进一步的处理,或者和其他网格数据进行合并 等处理,就需要使用格网插 ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
随机推荐
- uniapp 图片文件流
uni.request({ url: '*****', //仅为示例,并非真实接口地址. method: 'GET', responseType: 'arraybuffer', data: {}, h ...
- java技术系列(三) 多线程之并行处理和同步
java同步器: 1,Semaphone: 信号量 2,CountDownLatch:倒计数门栓 3,CyclicBarrier 障栅 : 4,Exchanger :
- 08 安装虚拟机:Windows 10
08 安装虚拟机:Windows 10 在安装虚拟机之前,总是要有安装来源媒体(例如:ISO映像之类),方可顺利进行.在Proxmox VE中有几种将ISO档置入Proxmox VE的方式,本节介绍其 ...
- 嵌入式Qt中实现串口读取的事件驱动方法
在嵌入式Linux系统的UI设计中,比较常见的是使用Qt库来实现.而在Qt中进行程序设计时,也经常会用到串口(UART)通信.现在基于Qt5.1以上的版本中,集成有串口模块(如QSerialPort) ...
- 在C++创建动态数组
计算首行两数相加 #include <iostream>11 #include <vector> using namespace std; int main() { vecto ...
- 什么是bootstrap?
In computing, the term bootstrap means to boot or to load a program into a computer using a much sma ...
- Joseph Problem With Passwords In Java
问题描述: 编号为1,2,......,n的n个人(每个人的信息有编号.姓名和密码三项)按照顺时针方向围坐一圈, 每个人有且只有一个密码(正整数,密码用随机方式赋值,范围1-15).一开始任选一个正整 ...
- 为什么JAVA中(byte)128结果为-128;(byte)-129结果为127
为什么JAVA中(byte)128结果为-128;(byte)-129结果为127 在JAVA中默认的整型为int型,int型占4个字节,为32位.byte占一个字节为8位. JAVA中的二进制都是采 ...
- java-功能-参数校验
1.map中数据 if (null == input.get("logId") || StringUtils.isBlank((String) input.get("lo ...
- 【性能监控】nmon和pyNmonAnalyzer的搭建和使用
1,安装nmon 二进制安装:暂时空着,没有FQ,访问不了nmon的官网. 下载对应操作系统的文件,直接运行: 下载地址:https://pan.baidu.com/s/1gTBh10-ark5gbe ...