Используя структурированный массив, я мог бы преобразовать 2d формулировку в 1d:
In [76]: X = np.array([(1,2),(3,4),(5,6)],'f,f')
In [77]: X
Out[77]: array([(1., 2.), (3., 4.), (5., 6.)], dtype=[('f0', '<f4'), ('f1', '<f4')])
In [78]: pw = np.piecewise(
...: X,
...: [
...: np.abs(X['f0'] - X['f1']) < 1,
...: np.abs(X['f0'] - X['f1']) >= 1
...: ],
...: [
...: lambda X: 1 + 2 * X['f0'] + 3 * X['f1'],
...: lambda X: 1.5 + 2.5 * X['f0'] + 3.5 * X['f1']
...: ]
...: )
In [79]: pw
Out[79]:
array([(11., 11.), (23., 23.), (35., 35.)],
dtype=[('f0', '<f4'), ('f1', '<f4')])
Числа повторяются в pw
, потому что piecewise
возвращает массив с такой же формой и типом d, какX
, хотя lambdas
возвращает только скалярные значения.