С вашей функцией:
In [247]: basis2(np.array([1,.5,0,-.5,-1]))
Out[247]:
[array([ 0., 0., 0., 0., -0., 1.]),
array([ 0., 0., 0., -0., 1., 0.]),
array([ 0., -0., 1., 0., 0., 0.]),
array([-0., 1., 0., 0., 0., 0.]),
array([ 1., 0., -0., 0., 0., 0.])]
In [248]: %hist 245
basis2_1(np.array([1,.5,0,-.5,-1]))
С некоторыми незначительными изменениями:
def basis2_1(x) :
xr = 2.0*(x[x>0]-0.5)
res1 = np.array([0.0*xr, 0.0*xr, 0.0*xr, 0.5*xr*(xr-1.0),-1.0*(xr+1)*(xr-1), 0.5*xr*(xr+1.0)])
xl = 2.0*(x[x<=0]+0.5)
res2 = np.array([0.5*xl*(xl-1.0),-1.0*(xl+1)*(xl-1),0.5*xl*(xl+1.0),0.0*xl,0.0*xl,0.0*xl])
return res1, res2
In [250]: basis2_1(np.array([1,.5,0,-.5,-1]))
Out[250]:
(array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., -0.],
[-0., 1.],
[ 1., 0.]]),
array([[ 0., -0., 1.],
[-0., 1., 0.],
[ 1., 0., -0.],
[ 0., 0., -0.],
[ 0., 0., -0.],
[ 0., 0., -0.]]))
Соединение двух подмассивов:
In [251]: np.hstack(_)
Out[251]:
array([[ 0., 0., 0., -0., 1.],
[ 0., 0., -0., 1., 0.],
[ 0., 0., 1., 0., -0.],
[ 0., -0., 0., 0., -0.],
[-0., 1., 0., 0., -0.],
[ 1., 0., 0., 0., -0.]])
Очевидно, что нуждается в уточнении, ноэтого должно быть достаточно для начала работы.
Например, вы можете создать массив result = np.zeros((5,x.shape[0]))
, просто вставив соответствующие ненулевые элементы (сохранив все эти 0.0*xr
условия).
Глядя на эти блоки в Out[251]
:
In [257]: x = np.array([1,.5,0,-.5,-1])
In [258]: Out[251][3:,np.nonzero(x>0)[0]]
Out[258]:
array([[ 0., -0.],
[-0., 1.],
[ 1., 0.]])
In [259]: Out[251][:3,np.nonzero(x<=0)[0]]
Out[259]:
array([[ 0., -0., 1.],
[-0., 1., 0.],
[ 1., 0., -0.]])