为何v[1+(0×(⍴v))]在二维数组中引发秩错误而非返回首个元素?
问题原因与解决方案
你的代码v[1+(0×(⍴v))]等价于v[1 1],触发秩错误的核心原因是APL的索引规则:
- 对于秩为2的数组
v,若要按行、列维度分别指定索引,需要用分号;分隔多个索引参数(格式为v[行索引;列索引])。 - 而单括号内的单向量参数
1 1,会被APL解析为多维索引数组或线性索引数组:- 作为多维索引数组时,向量的秩为1,与目标数组的秩2不匹配(多维索引数组的秩需比目标数组多1,或结构满足对应维度要求),因此抛出秩错误;
- 作为线性索引数组时,
1 1会取数组按列优先展开后的第1个元素两次,这也不符合你访问左上角单个元素的需求。
正确写法
要访问v的左上角元素,直接用分号分隔行、列索引即可:
v[1;1]
如果想通过动态匹配维度数的方式生成索引,可以将向量参数拆分为多个标量参数传入:
v[(1+0×⍴v)⍤0]
或者用更简洁的方式直接取数组的首个元素:
⊃v
内容的提问来源于stack exchange,提问作者trisimix
相关产品推荐
相关产品推荐

