微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

零件和跨度:是否有理由不起作用?

如何解决零件和跨度:是否有理由不起作用?

| 这是设计问题,而不是现有功能。 我想使用:
{1,2,3,4,5}[[{1 ;; 3,2 ;; 5}]]
我预计:
{{1,3},{2,5}}
但这是无效的:
During evaluation of In[1]:= Part::pspec: Part specification {1;;3,2;;5} is neither an integer nor a list of integers. >>
我不是在问为什么这行不通(简单:不支持)。 相反,是否有理由不起作用?也就是说,是否有逻辑原因不支持此操作? 顺便说一句,我没有特别询问嵌套列表的语法,例如:
{1,5}[[{{1,5}}]]
因为我相信“规则”较少,波动性更大,而“ 4”则更易于定义和控制。     

解决方法

        我认为您要问的真正问题是为什么这不起作用:
In[15]:= {1,2,3,4,5}[[{{1,3},{2,5}}]]

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

Out[15]= {1,5}}]]
因为
Span
似乎是在
Part
之上实现的更高级的包装器(这是一个猜测)。最近在MathGroup上也问过同样的问题。没有一个令人满意的答案,我的感觉是,从用户的角度来看,这只是一个遗漏-我看不出根本不起作用的根本原因。而且,在某些情况下,此功能将使生活更加轻松。 从技术/实现的角度来看,我可以推测这与扩展的“ 7”赋值功能不一致。具体来说,我们知道ѭ7不仅可以用于元素提取,还可以用于有效的元素分配,其中可以同时分配整个规则结构(矩形子矩阵),例如
In[18]:= 
a = Table[i+j,{i,2},{j,4}]

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

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

Out[22]= {{2,7,8,9,10,6}}
如果“ 7”允许对位置使用嵌套列表规范,则应立即为非矩形子结构提供赋值功能,否则使用起来会变得不那么直观(因为会有拐角处的情况,等等)。而且我怀疑后者不太容易实现,因为扩展的“ 7”赋值功能可能直接基于数组内存布局。这也会给压缩数组带来问题(出于同样的原因-它们不能粗糙,必须是矩形的)。也许,Mathematica应该内置非常有效的参差不齐的数组结构(如链接列表),并且可以解决此问题。 因此,总而言之:从实现的角度来看,这种新功能将带来一些棘手的问题,这可以解释为什么尚未做到这一点(再次,这是一个猜测)。还要注意的是,对于元素提取,可以使用带有已准备好的位置列表的
Extract
来提取任意子结构,这几乎与使用
Part
一样高效。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。