Я пытаюсь вычислить коэффициент Джини набора чисел. Коэффициент Джини составляет половину средней абсолютной разности. То есть, для каждой возможной пары чисел в списке, я должен принять их абсолютную разницу и добавить эти различия вместе (и некоторые другие вещи). Это мой кодВложенный foreach в NetLogo
to-report calc-Gini [list-Values]
let sumdiff 0
foreach list-Values
[ foreach list-Values
[ set sumdiff sumdiff + abs (?1 - ?2)
]
]
report 0.5 * sumdiff/(mean list-Values * (length list-Values)^2)
end
Когда я проверить его (например, show calc-Gini (list 1 2 3)
) Я получаю сообщение об ошибке «задачи ожидается 2 входа, но только получил 1» на втором foreach
.
Я думаю, проблема в том, что NetLogo хочет одновременно проходить через петли foreach. Поэтому, если длина списка равна N, тогда он создает только N пар (то есть первый элемент в списке1 и первый элемент в списке2, затем второй элемент в каждом списке и т. Д.), В котором возникает требование для списков с равной длиной. Но мне нужно, чтобы он работал с парами N^2, полученными перекрестком списков.
Как я могу сделать вложенный foreach
делать то, что я хочу, и/или какой-то другой примитив более уместен?
благодаря Nicolas - идеально. Как только код работал, я понял, что у меня отсутствует термин в уравнении, поэтому отредактировал мой вопрос и ваш ответ, если кто-то найдет это от поиска коэффициента Джини – JenB