Как я могу реализовать такую ​​похожую на карту операцию в Mathematica - PullRequest
5 голосов
/ 08 января 2012

У меня есть список и произвольная функция, принимающая 4 параметра, скажем, {1, 11, 3, 13, 9, 0, 12, 7} и f[{x,y,z,w}]={x+y, z+w}, что я хочу сделать, это сформировать новый список так, чтобы 4 последовательных элемента в исходном списке оценивались, чтобы получитьновое значение в качестве компонента нового списка, и оценка должна быть сделана через каждые 2 позиции в исходном списке, в этом случае результирующий список будет:

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

Обратите внимание, что 4 и 2 могут измениться.Как это сделать удобно в Mathematica?Я представляю это как что-то вроде Map, но не знаю, как это сделать.

Ответы [ 2 ]

14 голосов
/ 08 января 2012

Есть альтернатива Map[f, Partition[...]]: Developer`PartitionMap.Который работает точно так же, как Map[f, Partition[list, n, ...]].Итак, ваш код будет

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]

, что даст тот же результат, что и Ответ Марка .

11 голосов
/ 08 января 2012
f[{x_, y_, z_, w_}] = {x + y, z + w};
list = {1, 11, 3, 13, 9, 0, 12, 7};
f /@ Partition[list, 4, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...