用零填充1D NumPy数组以形成2D数组

时间:2017-07-06 15:12:31

标签: python arrays numpy

我有一个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次,但我不想要那样。该怎么做?谢谢你的帮助。

2 个答案:

答案 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])