2015-12-04 5 views
1

Учитывая матрицу 2x2 a, преобразуйте ее в массив 2x1 b, где каждый столбец представляет собой вектор строки из a. Это действительно легко сделать в python. Есть ли элегантный и замкнутый способ сделать это в R?R equivlent python numpy slice: [:, None,:]

> a = np.array([[1, 2], [3, 4]]) 

array([[1, 2], 
     [3, 4]]) 

> b = a[:, None, :] 

array([[[1, 2]], 
     [[3, 4]]]) 

В R Я хочу, чтобы этот вход:

a = matrix(1:4, ncol=2, byrow = T) 

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

быть изменен, чтобы соответствовать этому выводу:

b = array(1:4, dim=c(2,1,2)) 

, , 1 

    [,1] 
[1,] 1 
[2,] 2 

, , 2 

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

См. Мой ответ ниже. – doicomehereoften1

ответ

2

Похоже, что вы могли бы на самом деле пытаемся получить массив 2x1x2? Таким образом, в R вы преобразовали матрицу в массив (это отдельные классы), указав нужные размеры для нового массива.

a <- matrix(c(1,2,3,4), 2, byrow=TRUE) 
b <- array(t(a), dim=c(2,1,2)) 
b 
+1

Матрица представляет собой массив 2d, а не отдельный класс. Обратите внимание, что 'class (array (1: 4, c (2, 2)))' '' '' 'матрица' 'и' same (matrix (1: 4, 2), array (1: 4, c (2,2)))) 'ИСТИНА. –

+0

Да, я никогда этого не замечал. Думаю, я всегда думал о них как о разных классах, так как функции, требующие матричной ошибки при подаче массива и наоборот. – doicomehereoften1

+0

@ doicomehereoften1, В python я могу вычесть два массива (b - a), но он не появляется, я могу легко сделать это в R. В python 'ba = array ([[[0, 0], [-2, -2]], [[2, 2], [0, 0]]])' – Matt

Смежные вопросы