2016-06-14 2 views
1

Я пытаюсь вычислить среднее значение вложенных списков. Я попытался с помощью функции карты, но по умолчанию дает среднее значение в противоположном измерении, что я заинтересован в Смотрите пример ниже:.Средство вложенных списков

set a [[1 1][2 2][3 3]] ; create a nested list 
set b map mean a  ; b equals [1 2 3] 

Этот ответ дает [1 2 3] для б. Однако меня интересует ответ [2 2], взяв среднее значение в «другом» измерении. Я бы предположил, что есть способ сделать это с map, но не понял.

ответ

2
to go 
    print column-means [ 
    [ 1 1 ] 
    [ 2 2 ] 
    [ 3 3 ] 
    ] 
end 

to-report column-means [ matrix ] 
    if length (remove-duplicates map length matrix) > 1 [ 
    error "All rows must be the same length" 
    ] 
    report n-values length first matrix [ mean extract ? matrix ] 
end 

to-report extract [ i row ] 
    report map [ item i ? ] row 
end 
+0

Спасибо @Bryan Head за предложение использовать 'extract? matrix' непосредственно в 'n-values' вместо добавления отдельного шага' map'. –

+0

Также обратите внимание, что этот код можно упростить, если/когда https://github.com/NetLogo/NetLogo/issues/773 реализован. –

-1

Возможное решение заключается в следующем

set a [[1 2 3] [1 2 3]]
set b map mean a

это даст вам [2 2] для б.

+0

Я имею в виду, что если вы представляете себе матрицу 3x2, вместо того, чтобы определять как 3 строки-векторы, вы можете определить a как два столбца-вектора ... таким образом вы получите «среднее значение противоположный размер " – GhettiG

+0

Я согласен, что это сработает, за исключением того, что я не уверен, что вложенный список может быть построен таким образом, потому что вложенный список создается из списков, которые принадлежат агентам. – user3887089

Смежные вопросы