【发布时间】: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