Я пытаюсь транслировать одномерный вывод в трехмерный массив, используя логическое индексирование. У меня есть массив, который я хотел бы назначить:
output_array = np.zeros((2,4,3))
А затем несколько наборов логических массивов, которые я использую для индексации:
dim0_bool = np.array([True, True])
dim0_dim1_bool = np.array([[True, True, True, False],
[False, True, True, True]])
dim0_dim2_bool = np.array([[True, True, False],
[False, True, True]])
Из них я могу построить массив трехмерных логических индексов и с его помощью присвоить значение выходному массиву:
output_array_idx = np.einsum('i, ij, ik -> ijk',
dim0_bool,
dim0_dim1_bool,
dim0_dim2_bool)
output_array[output_array_idx] = 1.0
Что все работает нормально и дает ожидаемый результат:
array([[[1., 1., 0.],
[1., 1., 0.],
[1., 1., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 1., 1.],
[0., 1., 1.],
[0., 1., 1.]]])
Однако то, что я действительно хотел бы сделать (и я не уверен, насколько это возможно), - это передать одномерный массив индексированным элементам output_array
. Например:
dim2_output = np.array([1.0, 2.0])
Затем:
output_array[output_array_idx] = dim2_output
что в идеале дало бы:
array([[[1., 2., 0.],
[1., 2., 0.],
[1., 2., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 1., 2.],
[0., 1., 2.],
[0., 1., 2.]]])
Это не работает как есть, потому что индексация output_array
на output_array_idx
уменьшает его до одномерного массива, и поэтому я не могу назначить ему dim2_output
(одномерный, но другой длины).
Надеюсь, что это ясно, и любая помощь (или предложения о том, как это может быть лучше) очень ценится.
dim0_dim2_bool
были:[[True, True, False], [True, True, True]]
? - person Divakar   schedule 09.12.2018