Как сделать 2d массив Numpy 3D массивом? - PullRequest
31 голосов
/ 10 сентября 2011

У меня есть 2d массив с формой (x, y), который я хочу преобразовать в 3d массив с формой (x, y, 1).Есть ли хороший Pythonic способ сделать это?

Ответы [ 5 ]

50 голосов
/ 10 сентября 2011

В дополнение к другим ответам, вы также можете использовать нарезку с numpy.newaxis:

>>> from numpy import zeros, newaxis
>>> a = zeros((6, 8))
>>> a.shape
(6, 8)
>>> b = a[:, :, newaxis]
>>> b.shape
(6, 8, 1)

Или даже это (которое будет работать с произвольным числом измерений):

>>> b = a[..., newaxis]
>>> b.shape
(6, 8, 1)
9 голосов
/ 10 сентября 2011
numpy.reshape(array, array.shape + (1,))
4 голосов
/ 16 октября 2018
import numpy as np

# create a 2D array
a = np.array([[1,2,3], [4,5,6], [1,2,3], [4,5,6],[1,2,3], [4,5,6],[1,2,3], [4,5,6]])

print(a.shape) 
# shape of a = (8,3)

b = np.reshape(a, (8, 3, -1)) 
# changing the shape, -1 means any number which is suitable

print(b.shape) 
# size of b = (8,3,1)
2 голосов
/ 29 марта 2018

надеюсь, что эта функция поможет вам конвертировать 2D массив в 3D массив.

Args:
  x: 2darray, (n_time, n_in)
  agg_num: int, number of frames to concatenate. 
  hop: int, number of hop frames. 

Returns:
  3darray, (n_blocks, agg_num, n_in)


def d_2d_to_3d(x, agg_num, hop):

    # Pad to at least one block. 
    len_x, n_in = x.shape
    if (len_x < agg_num): #not in get_matrix_data
        x = np.concatenate((x, np.zeros((agg_num - len_x, n_in))))

    # main 2d to 3d. 
    len_x = len(x)
    i1 = 0
    x3d = []
    while (i1 + agg_num <= len_x):
        x3d.append(x[i1 : i1 + agg_num])
        i1 += hop

    return np.array(x3d)
2 голосов
/ 10 сентября 2011
import numpy as np

a= np.eye(3)
print a.shape
b = a.reshape(3,3,1)
print b.shape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...