You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在J语言中创建频率矩阵(统计数组元素数量)的实现方法

嘿,针对你要在J语言里统计数组元素频率(生成频率矩阵/表)的需求,我给你整理了几种实用的实现方案,结合你给出的单词数组示例来讲解:

方法1:用/.~一键生成频率表(最简洁高效)

J语言里的/.是键控副词,搭配~(Self,把原数组同时作为左右参数),再结合计数动词#,可以直接对数组进行分组统计,一行代码搞定:

counts =: # /.~ text

这里的逻辑是:/.~会把text中的每个唯一元素作为“键”,然后用#(计数)统计每个键在原数组中出现的次数。比如你给出的数组里conceal和option各出现2次,结果里这两个元素对应的值就是2,其他单次出现的元素对应值为1。

运行后你会得到一个字典形式的频率表,键是唯一元素,值是对应出现次数。如果想要更像“矩阵”的两列结构(元素+次数),可以用:

frequency_matrix =: (,. #/.~) text

这样输出就是一个二维数组,第一列是元素,第二列是对应的计数。

方法2:分步实现(适合理解过程)

如果想要拆解步骤,先获取唯一元素再逐个统计,也很容易实现:

  • 第一步:提取数组中的唯一元素(用~.去重)
    unique_elements =: ~. text
    
  • 第二步:对每个唯一元素,统计它在原数组中的出现次数(用E.&判断存在性,#计数,"0逐元素处理)
    counts =: (#@E.&text)"0 unique_elements
    
  • 第三步:组合成频率矩阵
    frequency_matrix =: unique_elements ,. counts
    

这种方式更直观,适合刚接触J语言的朋友理解背后的逻辑。

方法3:用table生成交叉频率矩阵(多变量场景)

如果你的需求是生成真正的“矩阵”(比如元素两两组合的频率),可以用table函数:

cross_frequency_matrix =: text table text

这个矩阵的行和列都是text的唯一元素,单元格值是对应元素对的出现次数。不过如果只是单变量的频率统计,前面两种方法会更直接。

示例演示

假设你的输入数组是:

text =: 'speak';'conceal';'terribl';'option';'write';'book';'come';'tuesdai';'matter';'act';'conceal';'catastroph';'integr';'depart';'justic';'put';'wai';'choic';'realli';'bad';'option'

运行#/.~ text后,输出结果会是:

act        1
bad        1
book       1
catastroph 1
choic      1
come       1
conceal    2
depart     1
integr     1
justic     1
matter     1
option     2
put        1
realli     1
speak      1
terribl    1
tuesdai    1
wai        1
write      1

J语言的动词和副词组合就是这么灵活,根据你的需求选对应的方法就行~

内容的提问来源于stack exchange,提问作者Kevin Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:43:26