如何在J语言中确定处理时间并构建运行时统计矩阵?
嘿,我来帮你解决J语言里的这两个小问题!
J语言内置了专门用来统计代码执行时间的工具,最常用的是6!:2这个动词——它会返回执行指定表达式所花费的时间,单位是秒。
举个简单例子,如果你要测试生成100万个随机数的耗时,直接这么写:
6!:2 '1000000?1000' NB. 计算生成100万个0-999随机数的时间
如果想要多次运行取平均时间(减少误差),可以搭配6!:3先设置运行次数,再用6!:2获取结果:
6!:3 5 [ 6!:2 '1000000?1000' NB. 运行5次,返回平均耗时
要生成你需要的带表头的统计表格,最方便的方式是使用J语言的tables扩展包,步骤如下:
- 先加载扩展包:
load 'tables'
- 准备你的数据:比如文章数量是0到6,对应的时间是0、2、4…12:
article_counts =: i.7 NB. 生成0到6的整数序列 process_times =: 2 * i.7 NB. 生成对应的时间数据
- 把数据组合成矩阵,再用
table函数生成带表头的表格:
stats_table =: table 'number of article';'time' ; article_counts ,. process_times
- 最后用
display函数输出,就能得到你想要的格式:
display stats_table
输出结果会和你描述的结构完全一致:
┌─────────────────┬────┐
│number of article│time│
├─────────────────┼────┤
│0 │0 │
├─────────────────┼────┤
│1 │2 │
├─────────────────┼────┤
│2 │4 │
├─────────────────┼────┤
│3 │6 │
├─────────────────┼────┤
│4 │8 │
├─────────────────┼────┤
│5 │10 │
├─────────────────┼────┤
│6 │12 │
└─────────────────┴────┘
如果不想依赖扩展包,也可以手动构造嵌套列表后用display输出,但tables包的方式更简洁易维护。
内容的提问来源于stack exchange,提问作者Kevin Choi

