2012-01-08 11 views
5

Bir listem var ve 4 parametre alan isteğe bağlı bir işlev var, yani {1, 11, 3, 13, 9, 0, 12, 7} ve f[{x,y,z,w}]={x+y, z+w} diyelim, yapmak istediğim şey, arka arkaya 4 ardışık öğe olacak şekilde yeni bir liste oluşturmaktır. orijinal liste yeni listenin bileşeni olarak yeni bir değer elde etmek için değerlendirilir ve değerlendirme, bu durumda orijinal listedeki her 2 pozisyonda yapılmalıdır edilir, ortaya çıkan listesi: buradaMathematica'da böyle bir harita benzeri işlemi nasıl uygulayabilirim

{{12, 16}, {16, 9}, {9, 19}} 

Not 4 ve 2 değişebilir. Bunu Mathematica'da nasıl rahatlıkla yapabilirsiniz? Bunu, Map gibi bir şey olarak hayal ediyorum ama nasıl ilişki kuracağından emin değilim.

cevap

11
f[{x_, y_, z_, w_}] = {x + y, z + w}; 
list = {1, 11, 3, 13, 9, 0, 12, 7}; 
f /@ Partition[list, 4, 2] 
14

Map[f, Partition[...]] bir alternatif var: Developer`PartitionMap. Hangi tam olarak Map[f, Partition[list, n, ...]] gibi çalışır. Yani, kodunuz Mark's answer aynı sonucu veren

Needs["Developer`"] 
f[{x_, y_, z_, w_}] = {x + y, z + w}; 
list = {1, 11, 3, 13, 9, 0, 12, 7}; 
PartitionMap[f,list, 4, 2] 

olurdu.

İlgili konular