【问题标题】:How to change matrix values to values from another matrix - Wolfram如何将矩阵值更改为另一个矩阵的值 - Wolfram
【发布时间】:2017-03-29 09:53:11
【问题描述】:

我刚刚开始使用 Wolfram Mathematica,我想实现一个简单的遗传算法。数据的构造给出了,我必须从这样的行/列开始。

这是我所拥有的:

  chromosome := RandomSample[CharacterRange["A", "G"], 7]
    chromosomeList = Table[chromosome, 7] // MatrixForm

这给了我一个矩阵,其中每一行代表一个染色体:

yPos = Flatten[Position[chromosomeList, #], 1] & /@ {"A", "B", "C", 
    "D", "E", "F", "G"};
yPos = yPos[[All, 3 ;; 21 ;; 3]] // Transpose

现在每一列都代表一个字母(从 A 到 G),每一行都是它在每个染色体中的索引:

这是一个给定的效率矩阵,其中每一行代表不同的字母(从 A 到 G),每列给出应该应用于特定位置的值:

    efficiencyMatrix = {
  {34, 31, 20, 27, 24, 24, 18},
  {14, 14, 22, 34, 26, 19, 22},
  {22, 16, 21, 27, 35, 25, 30},
  {17, 21, 24, 16, 31, 22, 20},
  {17, 29, 22, 31, 18, 19, 26},
  {26, 29, 37, 34, 37, 20, 21},
  {30, 28, 37, 28, 29, 23, 19}}

我想要做的是创建一个矩阵,其值对应于字母及其位置。我是这样做的:

    values = Transpose[{ efficiencyMatrix[[1, yPos[[1]]]], 
   efficiencyMatrix[[2, yPos[[2]]]], 
   efficiencyMatrix[[3, yPos[[3]]]], 
   efficiencyMatrix[[4, yPos[[4]]]], 
   efficiencyMatrix[[5, yPos[[5]]]], 
   efficiencyMatrix[[6, yPos[[6]]]], 
   efficiencyMatrix[[7, yPos[[7]]]]}]

我怎样才能写得更优雅?

【问题讨论】:

  • 您可能想在mathematica.stackexchange.com 提出这个问题,但如果您确实从该站点删除它。交叉发布是相当不受欢迎的。
  • 附注一点,但通常不建议以格式化的形式存储任何内容。您应该使用 (chromosomeList = Table[chromosome, 7]) // MatrixForm 来存储表格和仅用于显示的格式。

标签: list dictionary matrix wolfram-mathematica populate


【解决方案1】:

您可以使用函数Through 将函数列表应用于某个变量,这在多次应用Position 时很有帮助。因为Position[patt][expr] == Position[expr, patt],我们可以做

Through[ (Position /@ CharacterRange["A","C"])[{"B", "C", "A"}] ]

获取{3, 1, 2}

Position 也可以对列表进行操作,所以我们可以通过这样做来简化查找ypos

Transpose@Map[Last, Through[(Position /@ characters)[chromosomeList]], {2}]

其中charactersCharacterRange 的相关输出。

我们还可以通过映射Range 函数来简化整数范围的处理,所以我们最终得到

characters   = CharacterRange["A","G"]
efficiencies = ...
chromosomes  = ...

ypos = Transpose@Map[Last, Through[(Position /@ characters)[chromosomes]], {2}];
efficiencies[[#, ypos[[#]]]]& /@ Range[Length[characters]] //Transpose ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多