APL查找矩阵中元素的频率

时间:2014-08-03 13:06:46

标签: matrix frequency apl

我有这段代码

((⍳3)∘.+(⍳2))

生成以下矩阵

2 3 
3 4 
4 5 

我想找到结果中每个唯一元素的出现,即结果中出现2,3,4,5。

我尝试使用"∘。="用矩阵本身然后重新整形,使每个子矩阵的元素变换成一行 使用

6 6⍴ ((⍳3)∘.+(⍳2))∘.=((⍳3)∘.+(⍳2))

给出以下结果

1 0 0 0 0 0 for 2
0 1 1 0 0 0 for 3
0 1 1 0 0 0 for 3
0 0 0 1 1 0 for 4
0 0 0 1 1 0 for 4
0 0 0 0 0 1 for 5

你可以看到它仍然包含重复项目的总和,而且我现在已经丢失了。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您应该在矩阵中的唯一元素和所有元素的平面向量之间执行∘.=,例如:

      m ← ((⍳3)∘.+(⍳2))
      (∪,m) ∘.= ,m
1 0 0 0 0 0
0 1 1 0 0 0
0 0 0 1 1 0
0 0 0 0 0 1

然后只需+/就可以获得∪,m

的频率
      +/ (∪,m) ∘.= ,m
1 2 2 1
      ∪,m
2 3 4 5

(在GNU APL上测试。)

答案 1 :(得分:0)

Dyalog APL版本14.0 完全具有 Key运算符,您只需要对数据进行调整:

      {≢⍵}⌸ ,((⍳3)∘.+(⍳2))
1 2 2 1

Try it online!

您甚至可以使用的操作数函数的左参数来创建表格:

      {⍺,≢⍵}⌸ ,((⍳3)∘.+(⍳2))
2 1
3 2
4 2
5 1

Try it online!