如何在 Mathematica 中命名矩阵中的元素

How to name elements in a matrix in mathematica

我有数千个表示波形的向量,每个波形都代表一个特定的样本。我希望能够对每个样本执行操作,并使输出与该样本的名称相关联。我在 Mathematica 中找到了一些关于键的信息,但我无法让它们正常工作。下面是一个非常简化的示例。假设我有三个向量,每个向量有 5 个元素。我可以将其表示为 Mathematica 中的矩阵,如下所示:

InputSamples={{1,3,5,6,8}->"SampleA",{7,9,10,45,20}->"SampleB",{90,43,2,1,0}->"SampleC"};

现在假设我想对每个样本进行一些计算。

我可能会选择:

Map[Total,InputSamples]

现在我希望我的输出是:

{{SampleA,23},{SampleB,91},{SampleC,136}}

但我得到的是:

{{1+SampleA,3+SampleA,5+SampleA,6+SampleA,8+SampleA},{7+SampleB,9+SampleB,10+SampleB,45+SampleB,20+SampleB},{90+SampleC,43+SampleC,2+SampleC,1+SampleC,0+SampleC}}

我怎样才能得到上面显示的我想要的输出或类似的输出?

你得到你想要的

InputSamples={{1,3,5,6,8}->"SampleA",{7,9,10,45,20}->"SampleB",{90,43,2,1,0}->"SampleC"};
Map[{#[[2]],Total[#[[1]]]}&,InputSamples]

瞬间returns

{{SampleA,23},{SampleB,91},{SampleC,136}}

在依赖它之前要小心并测试这个方法

这不是通常的"try to write everything as punctuation characters"风格,而是这个

ruletotal[list_->name_]:={name,Total[list]};
Map[ruletotal,InputSamples]

完成了同样的事情,可能会给你一些想法,告诉你如何在未来完成类似的任务。

一些其他选项

MapAt[Total, InputSamples, {All, 1}]
(* {23 -> "SampleA", 91 -> "SampleB", 136 -> "SampleC"} *)

List @@@ MapAt[Total, InputSamples, {All, 1}]
(* {{23, "SampleA"}, {91, "SampleB"}, {136, "SampleC"}} *)

InputSamples // Association // KeyMap[Total]
(* <|23 -> "SampleA", 91 -> "SampleB", 136 -> "SampleC"|> *)

InputSamples // Association // KeyMap[Total] // AssociationMap[Reverse]
(* <|"SampleA" -> 23, "SampleB" -> 91, "SampleC" -> 136|> *)