我有这段代码
((⍳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
你可以看到它仍然包含重复项目的总和,而且我现在已经丢失了。 任何帮助将不胜感激。
答案 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
您甚至可以使用⌸
的操作数函数的左参数来创建表格:
{⍺,≢⍵}⌸ ,((⍳3)∘.+(⍳2))
2 1
3 2
4 2
5 1