syntax - 零件和跨度 : is there a reason this *should* not work?

标签 syntax wolfram-mathematica

这是一个设计问题,而不是现有功能的问题。

我想使用:

{1, 2, 3, 4, 5}[[{1 ;; 3, 2 ;; 5}]]

我期望:

{{1, 2, 3}, {2, 3, 4, 5}}

但它无效:

During evaluation of In[1]:= Part::pspec: Part specification {1;;3,2;;5} is neither an integer nor a list of integers. >>

我不是在问为什么这不起作用(很简单:不支持)。

相反,有什么理由它不应该工作吗?也就是说,是否有不支持的逻辑原因?

<小时/>

顺便说一句,我特别没有询问嵌套列表语法,例如:

{1, 2, 3, 4, 5}[[{{1, 2, 3}, {2, 3, 4, 5}}]]

因为我相信它不太“常规”且更不稳定,而 Span 则更加明确和受控。

最佳答案

我认为您问的真正问题是为什么这不起作用:

In[15]:= {1,2,3,4,5}[[{{1,2,3},{2,3,4,5}}]]

During evaluation of In[15]:= Part::pspec: Part specification 
{{1,2,3},{2,3,4,5}} is neither an integer nor a list of integers. >>

Out[15]= {1,2,3,4,5}[[{{1,2,3},{2,3,4,5}}]]

因为 Span 似乎是在 Part 之上实现的更高级的包装器(这是猜测)。同样的问题has been asked最近在 MathGroup 上。没有一个令人满意的答案,我的感觉是,从用户的角度来看,这只是一个遗漏 - 我看不出这不起作用的根本原因。此外,在某些情况下,此功能将使生活变得更加轻松。

从技术/实现的角度来看,我可以推测这将与扩展的 Part 分配功能相矛盾。具体来说,我们知道 Part 不仅可以用于元素提取,还可以用于高效的元素分配,其中可以同时分配整个规则结构(矩形子矩阵),例如

In[18]:= 
a = Table[i+j,{i,2},{j,4}]

Out[18]= {{2,3,4,5},{3,4,5,6}}

In[21]:= 
a[[All,{2,3}]] = {{7,8},{9,10}};
a

Out[22]= {{2,7,8,5},{3,9,10,6}}

如果Part允许位置的嵌套列表规范,它应该立即为非矩形子结构提供分配功能,否则使用起来会变得不太直观(因为会出现极端情况) , ETC)。我怀疑后者不容易实现,因为扩展的 Part 分配功能可能直接基于数组内存布局。这也会给打包数组带来问题(出于同样的原因 - 它们不能是参差不齐的,必须是矩形的)。也许,Mathematica 应该内置非常高效的参差不齐的数组结构(如链表),这个问题就可以解决。

所以,总结一下:从实现的角度来看,这样的新功能似乎会引入几个棘手的问题,这可以解释为什么还没有这样做(同样,这是一个猜测)。另请注意,对于元素提取,可以使用带有准备好的位置列表的 Extract 来提取任意子结构,这几乎与使用 Part 一样高效。

关于syntax - 零件和跨度 : is there a reason this *should* not work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174443/

相关文章:

syntax - 关键字 var 后面的下划线和接口(interface)名称是什么意思?

graphics - Mathematica 中这些未记录的样式选项有什么作用?

PHP语法。 bool 运算符、三元运算符和 JavaScript

MySQL:尝试从表中删除时出现语法错误

objective-c - Objective-C 中一行中的多个逗号分隔调用

mysql - 使用或不使用 CONSTRAINT

unix - 在 Mathematica 后台运行程序

python - 带断轴和交错颜色条的直方图

wolfram-mathematica - 有没有办法在 Mathematica 中使用 [[ 和 ]] 作为 Part 吗?

wolfram-mathematica - 数学: subscript simplification under noncommutative multiplication