如果满足某些条件,如何更改矩阵的元素?

How can I change the elements of a matrix if they satisfy some condition?

我正在使用 NetLogo 中的矩阵扩展。如果矩阵的特定元素等于某个数字,我希望能够对其进行修改。

例如,如果值为 0.95,我想对其进行 运行 random 2,以便它显示为 1 或 0。如果它是 1.75,则显示为 1 或一个 2 random (3 - 1) + 1

这会改变我的矩阵 m:

  let m matrix:from-row-list [[1 0.95 0.95] [2 1 1.75] [1 2 1] ]

对此:

[[1 1 0] [.05 1 2] [.05 .25 1] ]

谢谢

我不确定我是否理解你更新的矩阵示例——例如,为什么第二行的 2 在输出中变成 0.05?我假设您有一些其他规则来处理这些数字。无论如何,我认为你可以使用 matrix:map 来完成你想要的——你可能只需要在你的匿名报告者中设置规则来反映你想要的。下面是一个使用您为值 0.95 和 1.75 提供的规则的示例:

extensions [ matrix ]

to matrix-manipulation
  let m matrix:from-row-list [[1 0.95 0.95] [2 1 1.75] [1 2 1] ]

  let m2 matrix:map [ i -> val-change i ] m

  print matrix:pretty-print-text m2
end

to-report val-change [ val ]
  if val = 0.95 [
    report random 2
  ]
  if val = 1.75 [
    report 1 + random 2
  ]
  report val
end

输出变为:

[[ 1  0  1 ]
 [ 2  1  2 ]
 [ 1  2  1 ]]