#python #numpy
#python #numpy
Вопрос:
Рассмотрим следующие данные:
- гиперкуб numpy, например
x = np.random.rand(8, 8, 8, 8)
- индекс измерения, например
dim = 1
- заменяющий массив, например
y = np.random.rand(8)
как я могу заменить все значения данного измерения?
т.е. могу ли я сделать лучше, чем:
if dim == 0:
x[0,:,:,:] = y
elif dim == 1:
x[:,0,:,:] = y
elif dim == 2:
x[:,:,0,:] = y
elif dim == 3:
x[:,:,:,0] = y
else:
throw
Ответ №1:
Вы можете создать индексный кортеж с помощью выражения генератора:
x[tuple(0 if i == dim else slice(None) for i in range(4))] = y
Более подробная версия:
index = [slice(None)] * len(x.shape)
index[dim] = 0
x[tuple(index)] = y
Ответ №2:
Вы можете переместить затемненную ось вперед:
np.moveaxis(x, dim, 0)[0] = y