如何在 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|> *)
我有数千个表示波形的向量,每个波形都代表一个特定的样本。我希望能够对每个样本执行操作,并使输出与该样本的名称相关联。我在 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|> *)