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

问题描述 投票:0回答:2

我有成千上万个代表波形的矢量,这些波形中的每一个都代表特定的样本。我希望能够对每个样本执行操作,并使输出与该样本的名称相关联。我在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}}

如何获得上面想要的输出或类似的输出?

wolfram-mathematica
2个回答
1
投票

您将得到您想要的东西

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]

完成同一件事,并可能给您一些将来做类似任务的想法。


0
投票

某些其他选项

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|> *)
© www.soinside.com 2019 - 2024. All rights reserved.