np.select
docs говорит о двух списках аргументов.Если они являются массивами, они обрабатываются как списки, повторяющиеся в первом измерении.
In [112]: np.select([False,True],[np.array([1,2]), np.array([3,3])])
Out[112]: array([3, 3])
Очевидно, что если массивы внутри списков отличаются по форме, он пытается передать их вместе.В этом случае общей формой вещания является (2,).Таким образом, логическое условие расширено:
[False,True]
[np.array([False,False]),np.array([True,True])]
Аналогично вашему первому примеру np.array([3])
передает на (2,), который я использую выше.
In [113]: np.select([False,True],[np.array([1,2]), np.array([3])])
Out[113]: array([3, 3])
Но когда один из массивовимеет форму (3,), что вещание больше невозможно:
In [114]: np.select([False,True],[np.array([1,2]), np.array([3,4,5])])
---------------------------------------------------------------------------
/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py in select(condlist, choicelist, default)
699 # for example when all choices are scalars.
700 condlist = np.broadcast_arrays(*condlist)
--> 701 choicelist = np.broadcast_arrays(*choicelist)
702
703 # If cond array is not an ndarray in boolean format or scalar bool, abort.
....
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Короче говоря, condlist
и choicelist
должны быть одинаковой длины, и все элементы этих списков должны быть массивами, которые могут вещать сдруг с другом.Выводом будет массив с такой распространенной формой широковещания.
np.select
широко не используется.И я подозреваю, что в вашем случае с рваными, не транслируемыми массивами это бесполезно.