Как бороться с «несоответствующими» массивами?

#arrays #r #multidimensional-array

#массивы #r #многомерный массив

Вопрос:

Как можно выполнять поэлементные арифметические операции с двумя массивами, которые совместимы в первых измерениях, но имеют также дополнительное измерение?

Например, умножьте массив a (3 x 3 x 2) на массив b (3 x 3):

 a <- array(1:18, dim=c(3,3,2))
b <- diag(3)
 

Следующее не выполняется из-за несоответствия массивов.

 > a * b
 

Чтобы это сработало, вы должны преобразовать массив b в массив с правильным
количеством измерений.

 > a * array(b, dim=c(3,3,2))
 

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

Ответ №1:

Вы можете попробовать:

 a * c(b)
 

c удалит атрибуты, которые затем позволят b использовать их в качестве простого вектора и приведут к тому, что, я считаю, является вашим желаемым результатом:

 , , 1

     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    5    0
[3,]    0    0    9

, , 2

     [,1] [,2] [,3]
[1,]   10    0    0
[2,]    0   14    0
[3,]    0    0   18
 

Комментарии:

1. Да, это желаемый результат.