可最佳模拟SQL select语句实现矩阵筛选的APL表达式是什么
实现逻辑说明
首先假设你已经将CSV文件读取为APL中的二维数值数组mydata,col1对应数组的第一列,对应布尔掩码的生成表达式为:
2020 = mydata[;1]
- 语法解释:APL使用
[行索引;列索引]的格式索引二维数组,;留空代表选中该维度的所有元素,因此mydata[;1]代表提取所有行的第一列数据。等于比较会逐元素执行,直接返回长度和表格行数一致的布尔数组,元素为1代表对应行满足col1=2020的条件,0代表不满足,正好可以作为Compress函数的左参数。
完整筛选写法
要实现和select * from mydata where col1 = 2020完全等效的提取操作,直接用Compress函数(APL中为/运算符)组合即可:
(2020 = mydata[;1]) / mydata
拓展场景说明
- 如果你的表格包含表头行(比如第0行为表头,实际数据从第1行开始),可以调整写法跳过表头:
筛选完成后如果需要拼接回表头,用(2020 = mydata[1↓⍳⍴mydata;1]) / 1↓mydata表头,⍪筛选结果即可实现。 - 如果需要多条件筛选,直接用逻辑运算符组合布尔数组即可,比如实现
where col1=2020 and col2>100的逻辑:
把上面的表达式作为Compress的左参数即可完成多条件筛选。(2020 = mydata[;1]) ∧ (100 < mydata[;2])
内容的提问来源于stack exchange,提问作者Rudi Angela
相关产品推荐
相关产品推荐

