如何在APL中基于子列表首元素过滤嵌套列表?
解决APL数组过滤问题
你的需求是过滤数组x,只保留第一个元素为1的子数组。
正确实现代码
x ← ((1 'data1') (0 'data2') (0 'data3') (1 'data4') ) (⊃¨x)/x ⍝ 提取每个子数组的第一个元素作为掩码,过滤原数组 ┌─────────┬─────────┐ │┌─┬─────┐│┌─┬─────┐│ ││1│data1│││1│data4││ │└─┴─────┘│└─┴─────┘│ └─────────┴─────────┘
错误原因分析
你之前的代码((⊃y)[1])/y←x只取了第一个子数组的第一个元素(即标量1),APL中用标量作为掩码时,会将整个数组重复对应次数(这里标量1就是保留整个数组),所以没有实现过滤效果。
而⊃¨x是对x中的每个子数组应用⊃(取首元素),得到一个长度和x一致的数组1 0 0 1,用这个数组作为掩码时,就会保留对应位置为1的子数组。
内容的提问来源于stack exchange,提问作者Akanoa
相关产品推荐
相关产品推荐

