Вот решение StreamEx
StreamEx.of(choices).toMap(Choice::getName, c -> c);
Похоже, есть некоторые ошибки при копировании вашего кода на вопрос.
Но я подозреваю, что есть известная проблема с индексированием:
In [73]: a=np.zeros((2,3,4)); b=np.ones((3,4)); I=np.array([0,1])
Сделайте I
2 элемента. Индексирование b
дает ожидаемую форму (3,2). 3 строки из среза, 2 столбца из I
индексирования
In [74]: b[:,I].shape
Out[74]: (3, 2)
Но с 3d a
мы получаем транспонирование.
In [75]: a[0,:,I].shape
Out[75]: (2, 3)
и присвоение приведет к ошибке
In [76]: b[:,I]=a[0,:,I]
...
ValueError: array is not broadcastable to correct shape
Сначала помещается 2-элементный размер, определенный с помощью I
, и 3 элемента из :
в секунду. Это случай смешанной передовой индексации, о которой говорилось ранее, и есть проблема с ошибкой.
Вероятно, вы используете новый numpy
(или scipy
) и получаете другое сообщение об ошибке.
индексирование с двумя массивами или списками и срез в середине, помещает срез в конец, например
In [86]: a[[[0],[0],[1],[1]],:,[0,1]].shape
Out[86]: (4, 2, 3)
То же самое происходит с a[0,:,[0,1]]
. Но есть хороший аргумент, что это не должно быть так.
Что касается исправления, вы можете перенести значение или изменить индексирование
In [88]: b[:,I]=a[0:1,:,I]
In [90]: b[:,I]=a[0,:,I].T
In [91]: b
Out[91]:
array([[ 0., 0., 1., 1.],
[ 0., 0., 1., 1.],
[ 0., 0., 1., 1.]])
In [92]: b[:,I]=a[0][:,I]
Здесь я получаю эту ошибку с индексами [0,1,4]
:
IndexError: index 4 is out of bounds for axis 2 with size 4
. Предполагая, что значение 4
используется как индекс, в то время как SIZE 4 подразумевает, что максимальный индекс будет равен 3.
EDIT: теперь, когда вы изменили его на [0, 1, 3]
, он работает отлично.
EDIT: с вашим текущим кодом я получаю ту же ошибку, но когда я печатаю массивы они имеют поперечную форму:
print b[:, I]
print a[0, :, I]
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
Прежде всего, похоже, что вы пропустили запятую в строке 6:
I = sp.array([0,1,4])
Во-вторых, я ожидал бы, что значение 4 в массиве I поднимет IndexError, так как оба и b имеет максимальный размер 4. Я подозреваю, что вам может понадобиться:
I = sp.array([0,1,3])
Выполнение этих изменений запускает программу для меня, и я получил b как:
[[ 0. 0. 1. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 1. 0.]]
Я подозреваю, что вы хотите.