我有一个numpy数组:
arr=np.array([0,1,0,0.5])
我需要按如下方式从中形成一个新数组,这样每个零元素重复三次,每个非零元素都有2个前置零,后跟非零数字。简而言之,每个元素重复三次,原样为零,非零有前面的0,然后是数字本身。它如下:
([0,1,0,0.5])=0,0,0, [for index 0]
0,0,1 [for index 1]
0,0,0 [for index 2, which again has a zero] and
0,0,0.5
最终输出应为:
new_arr=[0,0,0,0,0,1,0,0,0,0,0,0.5]
np.repeat()重复所有数组元素n次,但我不想要那样。该怎么做?谢谢你的帮助。
答案 0 :(得分:3)
快速重新调整,然后拨打np.pad
即可:
np.pad(arr.reshape(-1, 1), ((0, 0), (2, 0)), 'constant')
输出:
array([[ 0. , 0. , 0. ],
[ 0. , 0. , 1. ],
[ 0. , 0. , 0. ],
[ 0. , 0. , 0.5]])
你想再把它弄平。只需拨打.reshape(-1, )
即可完成。
>>> np.pad(arr.reshape(-1, 1), ((0, 0), (2, 0)), 'constant').reshape(-1, )
array([ 0. , 0. , 0. , 0. , 0. , 1. , 0. , 0. , 0. , 0. , 0. ,
0.5])
答案 1 :(得分:0)
pad
想法的一个变体是连接一个零的二维数组
In [477]: arr=np.array([0,1,0,0.5])
In [478]: np.column_stack([np.zeros((len(arr),2)),arr])
Out[478]:
array([[ 0. , 0. , 0. ],
[ 0. , 0. , 1. ],
[ 0. , 0. , 0. ],
[ 0. , 0. , 0.5]])
In [479]: _.ravel()
Out[479]:
array([ 0. , 0. , 0. , 0. , 0. , 1. , 0. , 0. , 0. , 0. , 0. ,
0.5])
或向另一个方向填充:
In [481]: np.vstack([np.zeros((2,len(arr))),arr])
Out[481]:
array([[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ],
[ 0. , 1. , 0. , 0.5]])
In [482]: _.T.ravel()
Out[482]:
array([ 0. , 0. , 0. , 0. , 0. , 1. , 0. , 0. , 0. , 0. , 0. ,
0.5])