böylece bir fonksiyonu unflatten
o [email protected]@[email protected]
bir keyfi korkak iç içe liste expr
harita için en basit yolu nedir dümdüz sonra keyfi bir iç içe liste yeniden?Mathematica:
Motivasyon: Compile
sadece tam diziler (bir şey ben sadece öğrenilen - ancak hata mesajından) işleyebilir, böylece fikri düzleştirilmiş bir ifade derlenmiş sürümü ile birlikte unflatten
kullanmaktır:
fPrivate=Compile[{x,y},[email protected]@expr];
f[x_?NumericQ,y_?NumericQ]:[email protected]@fPrivate[x,y]
daha az genel sorununa çözüm örneği: ne aslında yapmanız gereken bazı düzene verilen bir değişkenli fonksiyonun kadar tüm türevleri hesaplamaktır. Bu işleri
expr=Table[D[x^2 y+y^3,{{x,y},k}],{k,0,2}];
unflatten=Module[{f,x,y,a,b,sslot,tt},
tt=Table[D[f[x,y],{{x,y},k}],{k,0,2}] /.
{Derivative[a_,b_][_][__]-> x[a,b], f[__]-> x[0,0]};
(Evaluate[tt/.MapIndexed[#1->sslot[#2[[1]]]&,
Flatten[tt]]/. sslot-> Slot]&) ]
Out[1]= {x^2 y + y^3, {2 x y, x^2 + 3 y^2}, {{2 y, 2 x}, {2 x, 6 y}}}
Out[2]= {#1, {#2, #3}, {{#4, #5}, {#5, #7}}} &
ama şık ne de genel de: Bu durumda, ben şöyle boyunca yolumu kesmek. Düzenleme
: Burada AAZ tarafından sağlanan çözümün "iş güvenliği" sürümü:
In[2]= makeUnflatten[expr]
Out[2]= {#1,{#2,#3},{{#4,#5},{#6,#7}}}&
Bunu test etmedim, ancak Leonid Shifrin'in 'rearrangeAs' modifikasyonu http://stackoverflow.com/questions/4811082/applying-transformation-of-gatherby-to-a-different-list/4811794# 4811794 –
Teşekkürler, Yaroslav: Bu kesinlikle ilgili görünüyor - ama grok için biraz zor :). Ben hiç kimse ısırırsa göndereceğim bir şey kendimi yapıyorum sona erdi ... Aynı hikaye her zaman: 1) özel durum için sorunu çözmek, 2) daha genel bir çözüm eğlenceli olabilir, 3) teğet üzerinde zaman israf önlemek için Diğerleri için teğet çalışmalarınızı yapmak için SO üzerine gönderin, 4) kendiniz de yapın. – Janus
Sigh Bu soru görünüyor ilgili http://stackoverflow.com/questions/3807976/inverse-of-flatten-in-mathematica – dbjohn