我有成千上万个代表波形的矢量,这些波形中的每一个都代表特定的样本。我希望能够对每个样本执行操作,并使输出与该样本的名称相关联。我在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]
立即返回
{{SampleA,23},{SampleB,91},{SampleC,136}}
请谨慎操作,并在依赖之前测试此方法
这不是通常的“尝试将所有内容都写为标点符号”的样式,但是此
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|> *)