如何在APL中统计向量中标量的出现次数?含示例场景
在APL中统计向量内标量的出现次数
嘿,这事儿在APL里有好几种简洁的实现方式,我结合你给的向量'H2DH2DH'来演示:
方法一:最直接的「比较+求和」
这是APL里最常用的方式,利用广播比较和求和的组合:
vec ← 'H2DH2DH' +/ vec = 'H' ⍝ 输出结果:3
原理很简单:
vec = 'H'会把向量里的每个元素和标量'H'逐一比较,生成一个布尔向量(匹配为1,不匹配为0)+/对这个布尔向量求和,1的总数就是'H'的出现次数
方法二:用⍸(Where)函数计数
如果你更习惯通过索引来处理,可以先用⍸获取所有匹配元素的位置,再用≢(计数)求索引的长度:
≢⍸vec = 'H' ⍝ 同样输出3
这个逻辑和方法一本质一致,只是换了一种表达方式。
方法三:批量统计用⌸(Key)函数
如果需要同时统计向量里多个元素的出现次数,⌸函数会更高效:
vec ⌸ {⍺, ≢⍵}
运行后会返回一个包含元素和对应次数的矩阵:
2 2 D 2 H 3
如果只想单独提取'H'的次数,可以再加一步筛选:
⊃(vec ⌸ {⍺,≢⍵})[⍸'H'=⊃⍪vec ⌸ {⍺,≢⍵};2]
不过如果只是统计单个元素,前两种方法会更简洁。
内容的提问来源于stack exchange,提问作者Richard Adams
相关产品推荐
相关产品推荐

