Wolfram mathematica 在mathematica中如何命名矩阵中的元素

Wolfram mathematica 在mathematica中如何命名矩阵中的元素,wolfram-mathematica,Wolfram Mathematica,我有数千个代表波形的向量,每个波形都代表一个特定的样本。我希望能够对每个样本执行操作,并将输出与该样本的名称关联。我在Mathematica中找到了一些关于键的信息,但我无法让它们正确工作。下面是一个非常简单的例子。假设我有三个向量,每个向量有5个元素。我可以用Mathematica中的矩阵表示如下: InputSamples={{1,3,5,6,8}->"SampleA",{7,9,10,45,20}->"SampleB",{90,43,2,1,0}->"SampleC"};

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

完成同样的事情,并且可能会给你一些将来如何完成类似任务的想法。

你可以从中得到你想要的

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|> *)
MapAt[Total,InputSamples,{All,1}]
(*{23->“样本辩诉”,91->“样本B”,136->“样本”}*)
List@@@MapAt[总计,InputSamples,{All,1}]
(*{23,“SampleC”},{91,“SampleB”},{136,“SampleC”}}*)
InputSamples//Association//KeyMap[总计]
(*“样本答辩”,91->“样本B”,136->“样本”|>*)
InputSamples//Association//KeyMap[Total]//AssociationMap[Reverse]
(*23,“样本B”->91,“样本C”->136 |>*)
其他一些选项

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|> *)
MapAt[Total,InputSamples,{All,1}]
(*{23->“样本辩诉”,91->“样本B”,136->“样本”}*)
List@@@MapAt[总计,InputSamples,{All,1}]
(*{23,“SampleC”},{91,“SampleB”},{136,“SampleC”}}*)
InputSamples//Association//KeyMap[总计]
(*“样本答辩”,91->“样本B”,136->“样本”|>*)
InputSamples//Association//KeyMap[Total]//AssociationMap[Reverse]
(*23,“样本B”->91,“样本C”->136 |>*)

将原始数据存储在一个关联()中,如
InputSamples={1,3,5,6,8},“SampleB”->…|>
然后有效地利用来操作它,将原始数据存储在一个关联()中,如
InputSamples={1,3,5,6,8},“SampleB”->…|>
然后有效地利用来操作它,