我有一个3D图像,分为连续区域,每个体素具有相同的值.分配给该区域的值对于该区域是唯一的,并用作标签.下面的示例图片描述了2D案例:
1 1 1 1 2 2 2
1 1 1 2 2 2 3
Im = 1 4 1 2 2 3 3
4 4 4 4 3 3 3
4 4 4 4 3 3 3
Run Code Online (Sandbox Code Playgroud)
我想创建一个描述这些区域之间的相互关系的图表.在上面的例子中,这将是:
0 1 0 1
A = 1 0 1 1
0 1 0 1
1 1 1 0
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个快速的解决方案来在MATLAB中为大型3D图像执行此操作.我提出了一个迭代所有区域的解决方案,这需要0.05s每次迭代 - 不幸的是,对于具有32'000个区域的图像,这将花费半个多小时.现在有人有更优雅的方式吗?我发布了下面的当前算法:
labels = unique(Im); % assuming labels go continuously from 1 to N
A = zeros(labels);
for ii=labels
% …Run Code Online (Sandbox Code Playgroud) performance matlab image-processing vectorization adjacency-matrix
我试图在限制条件下找到一个优雅的算法来创建1和0的N×N矩阵:
矩阵不是严格必要的随机(随机和非随机解决方案都很有趣),因此对于Q均匀,只需使每一行成为矢量的循环移位
[0 1 1 0 ... 0 0 0 ... 0 1 1](Q = 4)
是一个有效的解决方案
但是,如何为Q奇做这个?或者如何为Q偶然做,但是以随机方式?
对于那些好奇的人,我试图在抽象网络上测试一些现象.
如果以前已经回答过这个问题我很抱歉,但我找不到任何问题都有对称限制,这似乎使它变得更加复杂.我没有证明这样的矩阵总是存在,但我确实这样认为.
我正在创建一个邻接矩阵来在 R 中进行空间分析。数据都是美国大陆的县。我从美国人口普查老虎文件中获取了各县的空间多边形。
我能够创建邻居列表,并且它是对称的。但是当我将其转换为邻接矩阵时,它不是对称的。这是一个问题,因为我的目标是使用 运行空间自逻辑模型ngspatial::autologistic,并且出现错误,指出我必须提供对称二元邻接矩阵。
这是我创建邻接矩阵的 R 代码:
us<-readShapeSpatial("County_2010Census_DP1.shp")
#Trim out counties outside of continental US
us2<-us[!substr(us$GEOID10,1,2)%in%c('02','60','66','78','15','72'),]
us2.nb = poly2nb(us2)
is.symmetric.nb(us2.nb) #Comes out true
us2.adj = nb2mat(us2.nb, style="B",zero.policy=F)
isSymmetric(us2.adj) #comes out false
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我可以splogit毫无问题地使用这个邻接矩阵。我不是空间分析方面的专家,所以我不能说我知道这些命令中发生了什么。
我的数据格式如下:
eventid mnbr
20 1
26 1
12 2
14 2
15 3
14 3
10 3
Run Code Online (Sandbox Code Playgroud)
eventid是一个成员参加数据的事件被表示为一个小组,因此您可以看到每个成员参加多个活动,多个成员可以参加同一个活动.我的目标是创建一个邻接矩阵,显示:
mnbr 1 2 3
1 1 0 0
2 0 1 1
3 0 1 1
Run Code Online (Sandbox Code Playgroud)
只要两名成员参加同一活动,就会有1.我成功地将csv文件的列读入2个独立的1D numpy数组.然而,在这里,我不确定如何继续.如何使用第2列创建矩阵,以及如何使用第1列填充值?我知道我没有发布任何代码,并且不期望在这方面有任何解决方案,但会非常感谢如何以有效的方式解决问题.我有大约300万个观测值,因此创建太多外部变量会有问题.提前致谢.我收到一条通知,说我的问题可能是重复的,但我的问题是解析数据而不是创建邻接矩阵.
我正在寻找用于表示图形的不同数据结构,我遇到了 Nvidia CUDA Toolkit,并在 source_indices、destination_offsets 的帮助下找到了表示图形的新方法。
被这种创新的图形表示所吸引,我寻找了其他表示图形的方法。但没有发现任何新东西。
我想知道除了邻接矩阵或列表之外,是否还有其他方式来表示图...
graph adjacency-list adjacency-matrix graph-algorithm data-structures
我听说大多数图算法(但不是全部)都使用邻接表。我只是想知道什么算法更喜欢邻接矩阵,为什么?
\n到目前为止,我\xe2\x80\x99ve发现Floyd Warshall使用邻接矩阵。
\n我正在尝试建模一个可以在每个时间步更改其配置的系统。各种配置是预先知道的,不依赖于时间步长。在某些配置之间允许转换,而在其他配置之间禁止转换。目标是构建一个跨越多个时间步长的允许转换的邻接矩阵。
让A成为s*s*k表示允许转换的逻辑矩阵,并A1...Ak表示 的页面/切片A:
A1 = A(:,:,1); A2 = A(:,:,2); ... Ak = A(:,:,k);
Run Code Online (Sandbox Code Playgroud)
第三维的含义是转换需要多少时间步,例如:如果A(1,3,2)非零,则表示状态#1可以转换为状态#3,这将需要2时间步。
让B成为我们想要构建的邻接矩阵,它表示nt时间步长。的形状B应该是示意性的(以块矩阵表示法):
A1 = A(:,:,1); A2 = A(:,:,2); ... Ak = A(:,:,k);
Run Code Online (Sandbox Code Playgroud)
其中主块对角线由nt0 个块组成,并且 的切片A逐渐“向右推”直到“时间用完”, 的切片A最终“超出”了B? 表明不可能有更多的转换。由于B由nt*nt s*s块组成,因此其大小为(nt*s)×(nt*s)。
问题:给定
Aandnt,我们如何B以最节省 CPU 和内存的方式构造?
我有一个 Pandas 数据框(930 行 \xc3\x97 50 列),如下所示:
\n| 指数 | 关键词A | 关键词B | 关键字 c |
|---|---|---|---|
| 第1页 | 1 | 3 | 1 |
| 第2页 | 4 | 0 | 2 |
| 第3页 | 0 | 1 | 1 |
我想将其转换为邻接矩阵/加权图,其中每个关键字都是一个节点。权重是每个关键字之间的组合之和。
\n结果将是这样的:
\n| 关键词A | 关键词B | 关键词C | |
|---|---|---|---|
| 关键词A | 0 | 3 | 8 |
| 关键词B | 3 | 0 | 4 |
| 关键词C | 8 | 4 | 0 |
我的数据对象有data.adj_t参数,给我稀疏邻接矩阵。我怎样才能从中得到edge_index尺寸张量?[2, num_edges]
我在处理图形数据时面临以下子任务:
我需要为具有来自“边界”索引数组的多个完全连接组件的图构造 COO 格式的图连接矩阵。
举个例子,给定数组
borders = [0, 2, 5]
Run Code Online (Sandbox Code Playgroud)
由此产生的 COO 矩阵应该是
coo_matrix = [[0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
[0, 1, 0, 1, 2, 3, 4, 2, 3, 4, 2, 3, 4]].
Run Code Online (Sandbox Code Playgroud)
也就是说,borders数组包含应形成完全连接的子图的节点范围(包括起始索引,排除结束索引)。
我想出了以下算法,但我怀疑性能可以提高:
import numpy as np
def get_coo(borders):
edge_list = []
for s, e in zip(borders, borders[1:]):
# create fully-connected subgraph
arr = np.arange(s, e)
t = np.array(np.meshgrid(arr, arr)).T.reshape(-1, 2)
t = t.T
edge_list.append(t) …Run Code Online (Sandbox Code Playgroud) adjacency-matrix ×10
graph ×5
python ×4
matlab ×2
numpy ×2
performance ×2
algorithm ×1
csv ×1
gis ×1
graph-theory ×1
magic-square ×1
matrix ×1
pandas ×1
pytorch ×1
r ×1
spatial ×1