Как назвать элементы в матрице в mathematica - PullRequest
0 голосов
/ 25 октября 2019

У меня есть тысячи векторов, которые представляют сигналы, каждый из которых представляет определенный образец. Я хотел бы иметь возможность выполнять операции с каждым из этих образцов и иметь вывод, связанный с именем этого образца. Я нашел некоторую информацию о ключах в 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}}

Как я могу получить это, чтобы получить показанный выше вывод, что я бынравится или что-то похожее на это?

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Некоторые другие опции

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|> *)
1 голос
/ 25 октября 2019

Вы получаете то, что просите, с этим

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]

выполняет то же самое и может дать вам некоторые идеи, как выполнять подобные задачи в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...