如何在 NetLogo 中向矩阵添加一行?
How to add a row to a matrix in NetLogo?
我有一个名为 orders 的 2*2 矩阵:
0 0
0 0
创建者:
set orders matrix:from-row-list [[0 0] [0 0]]
我想将其更改为 3*2 矩阵:
0 0
0 0
10 50
请问如何操作? (我想你必须创建一个新矩阵也称为订单来覆盖现有订单,但我无法弄清楚语法。)
最简单的方法可能是先将矩阵转换为列表,然后将新行添加到列表,然后再将其转换回矩阵。不是很优雅,但下面的报告功能应该可以解决问题:
extensions [ matrix ]
to-report matrix-add-row [matrix row-added]
let temp-list matrix:to-row-list matrix ;; converts the matrix to a list
set temp-list lput row-added temp-list ;; the new row is added to the list
report matrix:from-row-list temp-list ;; converts the list back to a matrix
end
to test
let orders matrix:from-row-list [[0 0] [0 0]]
show orders
show matrix-add-row orders [ 10 50 ]
end
这会 return 你:
observer> test
observer: {{matrix: [ [ 0 0 ][ 0 0 ] ]}}
observer: {{matrix: [ [ 0 0 ][ 0 0 ][ 10 50 ] ]}}
当然,你必须确保矩阵的维度和添加的行匹配。
为了以防万一这对其他人有帮助,我最后所做的是使用新的代理品种 'orders' 代替矩阵,每个订单海龟基本上都是矩阵。我告诉命令坐在与拥有它的乌龟相同的补丁上,这很容易,因为该模型中的乌龟不会移动。优点是我可以使用矩阵所没有的各种处理可能性。当然,如果你这样做并且行的顺序很重要,你需要包括一些管理它的方法(像 orders-own [index]
会做的)。
我有一个名为 orders 的 2*2 矩阵:
0 0
0 0
创建者:
set orders matrix:from-row-list [[0 0] [0 0]]
我想将其更改为 3*2 矩阵:
0 0
0 0
10 50
请问如何操作? (我想你必须创建一个新矩阵也称为订单来覆盖现有订单,但我无法弄清楚语法。)
最简单的方法可能是先将矩阵转换为列表,然后将新行添加到列表,然后再将其转换回矩阵。不是很优雅,但下面的报告功能应该可以解决问题:
extensions [ matrix ]
to-report matrix-add-row [matrix row-added]
let temp-list matrix:to-row-list matrix ;; converts the matrix to a list
set temp-list lput row-added temp-list ;; the new row is added to the list
report matrix:from-row-list temp-list ;; converts the list back to a matrix
end
to test
let orders matrix:from-row-list [[0 0] [0 0]]
show orders
show matrix-add-row orders [ 10 50 ]
end
这会 return 你:
observer> test
observer: {{matrix: [ [ 0 0 ][ 0 0 ] ]}}
observer: {{matrix: [ [ 0 0 ][ 0 0 ][ 10 50 ] ]}}
当然,你必须确保矩阵的维度和添加的行匹配。
为了以防万一这对其他人有帮助,我最后所做的是使用新的代理品种 'orders' 代替矩阵,每个订单海龟基本上都是矩阵。我告诉命令坐在与拥有它的乌龟相同的补丁上,这很容易,因为该模型中的乌龟不会移动。优点是我可以使用矩阵所没有的各种处理可能性。当然,如果你这样做并且行的顺序很重要,你需要包括一些管理它的方法(像 orders-own [index]
会做的)。