APL中⊂(enclose)函数的作用及⊂x无视觉差异的原因
APL中⊂(Enclose)函数的作用与你的问题解释
为什么⊂x看起来和x没有区别?
这是APL默认输出的特性:当你对数组执行⊂x后,得到的是一个单元素嵌套标量(这个标量的唯一元素就是原数组x),而APL在显示顶层的单元素嵌套数组时,会自动将其“展开”,所以视觉上和原数组完全一致,但两者的结构已经截然不同。
你可以通过以下操作验证结构差异:
- 查看形状:
⍴x返回4 8(原数组是4行8列的二维数组),而⍴⊂x返回空(因为⊂x是一个标量,没有维度) - 查看深度:
≡x返回1(原数组是一维深度的普通数组),≡⊂x返回2(嵌套数组,深度为2) - 拆解嵌套:
⊃⊂x会返回原数组x,说明⊂x确实是包裹了x的嵌套结构
Enclose(⊂)函数的具体作用
⊂函数的核心是将输入数组封装为一个单元素的嵌套标量,主要用途包括:
- 构建嵌套数组:当你需要把多个数组组合成一个更高维度的结构时,用⊂包裹每个数组可以保留它们各自的结构。比如
(⊂x) (⊂x)会生成一个包含两个4×8数组的向量,此时⍴(⊂x)(⊂x)返回2,每个元素都是独立的二维数组。 - 保护数组结构:在某些函数操作中,⊂可以避免数组被扁平化或按元素处理。比如如果直接把x和另一个数组拼接,可能会按元素展开,但用⊂包裹后,会作为整体参与操作。
- 创建标量容器:将任意数组转化为标量类型,用于需要标量输入的场景,或者在嵌套数据结构中作为单个节点存在。
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

