делает то же самое, создает массив (3, 3, 1).

от вопрос уже есть ответ здесь:

скопировать 2D-массив в 3-е измерение, N раз (Python) 5 ответов

У меня есть массив массивов 3x3, и я хочу создать матрицу 3x3xC, где новое измерение состоит из точных копий исходного массива 3x3. Я уверен, что это где-то спрашивают, но я не мог найти лучший способ. Я разработал, как это сделать для простого одномерного массива х:

new_x = np.tile(np.array(x, (C, 1))

который повторяет массив, затем выполните:

np.transpose(np.expand_dims(new_x, axis=2),(2,1,0))

который расширяет измерение и переключает ось так, чтобы массив повторялся в 3-м измерении (хотя это работает, я не уверен, что это также лучший способ сделать это) - какой самый эффективный способ сделать это для вообще nxn массив numpy?

 coldspeed18 нояб. 2017 г., 00:52
Не уверен, что я понимаю, но вы могли бы сделать то же самое сnp.tile(x, (C, 1)).T?
 ru11118 нояб. 2017 г., 00:58
Это просто перенесет 2-мерную матрицу, я хочу, чтобы массив повторялся в 3-м измерении.
 Paul Panzer18 нояб. 2017 г., 00:59
Моим любимым решением было бы вещание такnew_x = np.empty((3, 3, 2), dtype=x.dtype); new_x[...] = x[..., None]

Ответы на вопрос(1)

Решение Вопроса

Для версии только для чтения,broadcast_to может быть использован:

In [370]: x = np.arange(9).reshape(3,3)
In [371]: x
Out[371]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In [372]: x = np.broadcast_to(x[..., None],(3,3,10))
In [373]: x
Out[373]: 
array([[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]],

       [[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
        [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]],

       [[6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
        [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
        [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]]])

Или сrepeat:

In [378]: x=np.repeat(x[...,None],10,2)
In [379]: x
Out[379]: 
array([[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]],

       [[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
        [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]],

       [[6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
        [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
        [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]]])

Это большой массив, элементы которого можно изменять индивидуально.

 coldspeed18 нояб. 2017 г., 00:59
Приятно. Находятся(3, 3, 10) закодировано здесь?
 ru11118 нояб. 2017 г., 02:04
new_x = np.repeat (x [..., None], C, 2) работал как талисман - отлично. Что None делает в [..., None]? Почему это необходимо?
 Paul Panzer18 нояб. 2017 г., 01:05
Хороший. Такbroadcast_to будет официальной версией всего этогоstride_tricks черная магия?
 hpaulj18 нояб. 2017 г., 02:41
ВотNone являетсяnp.newaxis; np.expand_dims(x,2) делает то же самое, создает массив (3, 3, 1).
 hpaulj18 нояб. 2017 г., 01:00
Вы можете построить кортеж изx.shape а такжеC.

Ваш ответ на вопрос