Я пытаюсь транслировать одномерный вывод в трехмерный массив, используя логическое индексирование.У меня есть массив, который я хотел бы присвоить:
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
(который является одномерным, но другой длины).
Надеюсь, что это понятно, и любая помощь (или предложения о том, как к этому можно лучше подходить) высоко ценится.