- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想“瘦”一个用 sf::st_make_grid
制作的网格并获得高阶邻居的子集。
一阶邻居至少共享一侧,二阶邻居与一阶邻居共享一侧,以此类推。
下面是一个例子:
require(sf)
require(ggplot2)
x = st_sfc(st_polygon(list(rbind(c(0,0), c(1,0), c(1,1), c(0,0)))))
g = st_make_grid(x, cellsize = .3, square = FALSE )
g = st_as_sf(g)
g$id = 1:nrow(g)
ggplot(g) + geom_sf() + geom_sf_text(aes(label = id))
gs = g[g$id %in% c(3:5, 11:12, 18:20),]
ggplot(gs) + geom_sf() + geom_sf_text(aes(label = id))
c(1,2,9,8,10,16,17)
如何子集到任何更高阶的邻居?
最佳答案
我会尝试按如下方式解决您的问题。只有一个“免责声明”:我不确定以下方法是否 100% 正确,是否适用于所有情况。此外,正如前面的评论中所讨论的,以下解决方案并不是唯一的,您可以根据起点和算法背后的选择获得不同的“细化”。
加载包
# packages
library(sf)
library(igraph)
library(ggplot2)
生成数据并绘制所有多边形
x = st_sfc(st_polygon(list(rbind(c(0,0), c(1,0), c(1,1), c(0, 1), c(0,0)))))
g = st_make_grid(x, cellsize = .3, square = FALSE)
g = st_as_sf(g)
g$id = 1:nrow(g)
# plot all polygons
ggplot(g) +
geom_sf() +
geom_sf_text(aes(label = id))
my_graph <- graph_from_adj_list(st_touches(g))
plot(my_graph)
id_to_be_ignored <- ego(my_graph, order = 1, nodes = 1)[[1]]
以及一阶和二阶邻居列表
all_second_order_neighbours <- ego(my_graph, order = 2, nodes = 1)[[1]]
最终样本应该包括这两个id之间的差异
final_sample <- difference(all_second_order_neighbours, id_to_be_ignored)
现在我需要对二阶细胞重复这个操作
i <- 1
while (TRUE) {
# We need to end the loop sooner or later
if (i > length(final_sample)) break
# Extract the id of the node
id <- final_sample[[i]]
# Determine and exclude first order neighbours considering the id-th node
ego1_id <- ego(my_graph, order = 1, nodes = id)[[1]]
id_to_be_ignored <- union(id_to_be_ignored, difference(ego1_id, V(my_graph)[id]))
# Determine and add second order neighbours considering the id-th node
ego2_id <- difference(
ego(my_graph, order = 2, nodes = id)[[1]],
ego1_id
)
final_sample <- difference(union(final_sample, ego2_id), id_to_be_ignored)
# Increment i
i <- i + 1
}
所以这是结果
ggplot(g[c(1, as.integer(final_sample)), ]) +
geom_sf() +
geom_sf_text(aes(label = id))
id_to_be_ignored <- ego(my_graph, order = 2, nodes = 1)[[1]]
all_third_order_neighbours <- ego(my_graph, order = 3, nodes = 1)[[1]]
final_sample <- difference(all_third_order_neighbours, id_to_be_ignored)
i <- 1
while (TRUE) {
if (i > length(final_sample)) break
id <- final_sample[[i]]
ego2_id <- ego(my_graph, order = 2, nodes = id)[[1]]
id_to_be_ignored <- union(id_to_be_ignored, difference(ego2_id, V(my_graph)[id]))
ego3_id <- difference(
ego(my_graph, order = 3, nodes = id)[[1]],
ego2_id
)
final_sample <- difference(union(final_sample, ego3_id), id_to_be_ignored)
# Increment i
i <- i + 1
}
再次,这是结果
ggplot(g[c(1, as.integer(final_sample)), ]) +
geom_sf() +
geom_sf_text(aes(label = id))
关于r - 给定一个空间(六边形)网格,我怎样才能获得高阶邻居的样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65907022/
我从 SpatialPolygonsDataFrame 开始,它包含用于创建加纳各地区 map 的数据(可在 http://www.diva-gis.org/datadown 获取)。我正在尝试创建一
我遇到了一个问题,我需要根据存储在前一个元素中的信息修改容器的元素。示例: 如果前一个 vector 元素可被 2 整除,则将当前元素乘以 10 vector -> [12, 11, 33, 10]
总的来说,我对脚本编写还很陌生。我正在编写一个 expect 脚本,它通过 ssh 进入 Cisco 交换机,并运行“show cdp neighbors”命令来获取连接到交换机的所有设备的列表。然后
我正在尝试比较节点的值。使用 flood-fill 算法,我能够垂直和水平检查网格的每个节点。现在我必须更新我的代码以检查位于对 Angular 线上的单元格,如下图所示: 红色是当前节点,黄色是需要
我使用预先计算的指标使用 Scikit-Learn 的最近邻/半径分类。这意味着,我将成对距离的 n_samples_train x n_samples_train 矩阵传递给分类器的拟合方法。 现在
我有一个大的稀疏图,我将其表示为邻接矩阵(100k x 100k 或更大),存储为边数组。具有(非稀疏)4 x 4 矩阵的示例: 0 7 4 0 example_array = [ [7,1,2],
从有向图中并给出两个顶点 (v, u) 我需要找到:共同的“出”邻居和共同的“入”邻居。 例如: import networkx as nx ghybrid = nx.DiGraph() ghybri
我正在使用 JavaScript 进行图像处理,我想知道是否有任何通用公式可以确定像素的 x 邻居。 我知道对于 3*3 的正方形,可以使用特定的 x 和 y 像素确定 8 个邻居。 (x-1,y-1
在 CentOS 6.4(内核 2.6.32)上,为什么下面的第二个 arping 调用会创建一个新的 ARP 表条目,而第一个不会?网络行为是相同的,我感到困惑的是,在我看来,系统调用实际上是等同的
我是一名优秀的程序员,十分优秀!