R развернуть список матриц - PullRequest
0 голосов
/ 06 июня 2018

У меня есть список матриц с длиной d того же размера m*n (на самом деле это тензор m*n*d, но я не знаю, как его хранить таким образом).Я хотел бы сравнить все матрицы в одной позиции элемента и вывести матрицу с наибольшим элементом в каждой позиции.В частности, список матриц l = {l[[1], ..., l[[dd]],..., l[[d]]}.На выходе должна быть матрица mat, где mat[i,j] = max(l[[dd]][i,j]) for all dd.

Я знаю, что одно из возможных решений - это векторизация всех матриц и затем использование pmax (), но это очень медленно.Может кто-нибудь предложить более быстрый способ сделать это, пожалуйста?Благодаря.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете использовать Reduce с pmax ...

#some dummy data...
l <- list(matrix(1:4,nrow=2),matrix(5:2,nrow=2),matrix((0:3)*2,nrow=2))

l
[[1]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

[[2]]
     [,1] [,2]
[1,]    5    3
[2,]    4    2

[[3]]
     [,1] [,2]
[1,]    0    4
[2,]    2    6

Reduce(pmax,l)

     [,1] [,2]
[1,]    5    4
[2,]    4    6
0 голосов
/ 06 июня 2018

Вы можете упростить массив, а затем использовать apply.Если matrices - ваш список матриц, то следующее вычисляет, что вы хотите:

apply(simplify2array(matrices),c(1,2),max)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...