首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[kdb+/q]:将邻接矩阵转换为邻接表

[kdb+/q]:将邻接矩阵转换为邻接表
EN

Stack Overflow用户
提问于 2016-04-12 10:54:00
回答 1查看 370关注 0票数 1

给定(矩形)邻接矩阵m,如何用q语言构造邻接表?

QIdioms维基中,我找到了k语言的解决方案,当使用k)命令通过q控制台运行时,会给出'vs错误:

代码语言:javascript
复制
m:(1 0 1;1 0 1)
k) (^m)_vs &,/m
'vs

其结果应是:

代码语言:javascript
复制
0 0 1 1
0 2 0 2

这就是我在q中能够复制的东西

代码语言:javascript
复制
k) &,/m
0 2 3 5
q) where raze m
0 2 3 5

k^ a.k.a. shape动词在q中缺失了,所以我就这么做了:

代码语言:javascript
复制
k) (^m)
000b
000b
q) 2 3#0b
000b
000b

现在,既然:

代码语言:javascript
复制
q) parse "vs"
k) {x\:y}

我两次尝试都没成功:

代码语言:javascript
复制
q) (2 3#0b) _vs where raze m
'
q) (2 3#0b) _\: where raze m
'type

注意,QIdioms维基对于逆问题有Q解:从adj.list到adj.matrix。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 13:30:47

您有错误,因为原始Q成语是用k2编写的--这是现代kdb+版本不支持的k的旧版本。当前版本的k是k4,它与k2不向后兼容。

例如,X _vs Y (X和Y是旧k2中的整数原子或列表,行为类似于X vs Y )将从3.4t 2015.12.13:http://code.kx.com/q/ref/lists/#vs开始在kdb+中运行

自3.4t 2015.12.13:对于整数类型,计算Y的基表示形式为radices。

另一个例子。的确,^ in k2是一个形状运算符,但它已经不再是了。在k2中,^m将从示例中返回矩阵m2 3,而据我所知,当前实现的行为类似于qnot null

现在,回到原来的问题,“如何用q语言构造邻接列表”。这样做的方法之一是:

代码语言:javascript
复制
q)lm:{flip raze(til count x),''where each x}

代码语言:javascript
复制
k)lm:{+,/(!#x),''&:'x}

更新:下面是它的工作原理。如果我们使用任何“冗长”的语言构建一个邻接列表,我们就会这样做:

代码语言:javascript
复制
for i = 0 to <number of rows> - 1            <---- (1)
    for j = 0 to <number of columns> - 1     <---- (2)
        if M[i;j] <> 0                       <---- (3)
            print i, j

在像Q这样的数组语言中,可以将(1)“转换”为til count M,因为count将返回顶层的元素数,即行数。(2)(3)的组合可以用where each M表示。实际上,对于每一行,我们返回非零元素的位置。给定一个原始矩阵m,我们将得到:

代码语言:javascript
复制
til count m -> 0 1
where each m -> (0 2; 0 2)

我们所需要做的就是连接行和列索引。我们不能只使用,',因为它将将0与第一个0 2连接起来,而1将与第二个0 2连接,从而导致(0 0 2; 1 0 2)。我们需要进行一个更深的层次,将左边的每个元素与右侧嵌套列表(0 2; 0 2)的每个元素的每个元素连接起来,因此在,''中使用双撇号。

我希望现在说得通了。

就我个人而言,我不会使用flip (或k中的+ ),我无法读取这种形式的邻接矩阵:

代码语言:javascript
复制
0 0 1 1
0 2 0 2

我认为这是更易读的:

代码语言:javascript
复制
0 0
0 2
1 0
1 2

但当然要看你自己了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36571159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档