2014-02-14 5 views
2

행렬의 모든 원소를 특정 숫자의 제곱으로 취하고 싶습니다.NetLogo : 행렬의 각 원소의 힘을 얻는 법

가 지금은 동일한 전력으로 행렬의 모든 요소를 ​​먹고 싶어

let A matrix:make-constant 4 4 5 

거기에 5의 값으로 4 × 4 매트릭스를 제공합니다 나는 다음과 같이 설정 매트릭스 확장을 사용하여 매트릭스를 , 그래서 나는 그들이 2의 힘을 갖기를 원한다고 말하면, 숫자가있는 4x4 매트릭스로 끝나기를 원합니다.

어떻게하면됩니까?

답변

1

몇 가지 방법을 사용할 수 있습니다. 가장 단순한 것은 matrix:times-element-wise 일 것입니다. 불행하게도, 이것은 단지 1보다 크거나 같은 정수 능력을 위해 작동합니다

to-report matrix-power [ mat n ] 
    repeat n - 1 [ 
    set mat matrix:times-element-wise mat mat 
    ] 
    report mat 
end 

은 또한 전력에 각 요소를 인상하는에 맵을 사용하여 다음 목록의 목록에 행렬을 변환 할 수 있습니다. 이것은 0 분별 능력 및 네거티브 작업의 이점을 갖는다 :

to-report matrix-power [ mat n ] 
    report matrix:from-row-list map [ map [ ?^n ] ? ] matrix:to-row-list mat 
end 

map [ ?^n ] some-listn의 전력 목록의 각 요소를 일으킨다. matrix:to-row-list은 행렬을 목록의 목록으로 변환합니다. 따라서 의 결과에 각 목록 map [ ?^n ]을 적용합니다. 그런 다음 결과를 다시 matrix:from-row-list 행렬로 변환합니다.

당신은 어떤 요소 많다는 작동 할이 일반화 할 수 있습니다, 그리고

to-report matrix-map [ function mat ] 
    report matrix:from-row-list map [ map function ? ] matrix:to-row-list mat 
end 

을 우리가 같이 전원 기능을 정의 할 수 있습니다 :

to-report matrix-power [ mat n ] 
    report matrix-map task [ ?^n ] mat 
end 
+1

작업을 효율적으로 사용합니다. 행렬 확장이 작성되었을 때 작업이 존재했다면, 아마도'matrix : map'이 확장에 포함되었을 것입니다. 행렬은 변경 가능하므로 결과에 대한 새 행렬을 구성할지 여부 (또는 사용자가 원하는대로)에 내용을 변경할지 여부를 선택할 수 있습니다. –

+0

확장 기능은 명령 블록을 사용할 수도 있습니다. 맞습니까? 어쨌든 https://github.com/NetLogo/Matrix-Extension/issues/2 –

+1

에 대한 기능 요청을 열었습니다. 확장 기능은 일류 작업을 수행하기 전에도이를 위해 기자 블록을 사용할 수있었습니다. –

1

는 "지도"의 유용성에 대한 세스의 코멘트 NetLogo의 매트릭스 확장을위한 프리미티브가 나를 추가하게했습니다. 번들로 제공되는 확장 기능이므로이 기능을 최대한 활용하는 방법을 잘 모릅니다. 그러나 잠시 유용하다고 생각되면 알려 주시면 사본을 보내 드리겠습니다.

+0

https://github.com/NetLogo/Matrix-Extension/pull/3에서 요청을 요청하십시오. –

관련 문제