# 格网算法计算数据集区域数据密集度
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)

最新文章

  1. bzoj1008快速面
  2. MongoDB 可视化工具RoboMongo --- windows
  3. 转:python webdriver 环境搭建
  4. Python学习教程(learning Python)--2.3.2 Python函数实参详解
  5. C#更改控制台文本颜色
  6. Helpers\Request
  7. 详解HTML&lt;head&gt; 头标签元素的意义以及使用场景
  8. Python获取本机的mac,ip,name
  9. C# 动态创建出来的窗体间的通讯 delegate3
  10. 302重定向,MVC中的Get,Post请求。
  11. Fatal error: Undefined class constant &#39;MYSQL_ATTR_USE_BUFFERED_QUERY&#39; in D:\inetpub\vhosts\zenpty.com\httpdocs\includes\database
  12. C#自定义字符串替换Replace方法
  13. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil
  14. 聊聊基准测试的MVP方案
  15. Codeforces828 A. Restaurant Tables
  16. post请求参数Json字符串包含数组的校验和处理
  17. laravel二维数组手动分页显示
  18. 撩课-Java每天5道面试题第11天
  19. Firefox清空缓存的快捷键
  20. 将Gridview中的数据出到excel或word中

热门文章

  1. 为什么Controller层注入的是Service接口,而不是ServiceImpl实现类
  2. sql server 与mysql差异(innodb)
  3. conda pytorch 配置
  4. taro+vue3模板-废弃
  5. Mysql数据库基础第二章:(十)联合查询
  6. 【Numpy】安装Anaconda3和调试
  7. EOVS 83开局
  8. ubuntu18.04.3新装系统安装QT5.14.1和环境配置
  9. CSS边框(实线、虚线、破折号)
  10. css3 旋转 八仙桌