簡體   English   中英

python-用1D數組用零填充制作3D數組,具體取決於1D數組的索引

[英]Make 3D array with 1D arrays with zero padding depending on index of 1D array numpythonically

考慮以下一維數組

a=np.arange(3)+9
b=np.arange(3)+5

目前我正在通過使用初始化新的3d數組

n=4
cols=3
k=np.vstack((a,b,a*b,np.zeros((n,cols)),a,b,a,a,b**2,np.zeros((n,cols)),a*2,a)).T.reshape(-1,2,n+5)

其中a和b總是相同的形狀

導致

array([[[  9.,   5.,  45.,   0.,   0.,   0.,   0.,   9.,   5.],
        [  9.,   9.,  25.,   0.,   0.,   0.,   0.,  18.,   9.]],

       [[ 10.,   6.,  60.,   0.,   0.,   0.,   0.,  10.,   6.],
        [ 10.,  10.,  36.,   0.,   0.,   0.,   0.,  20.,  10.]],

       [[ 11.,   7.,  77.,   0.,   0.,   0.,   0.,  11.,   7.],
        [ 11.,  11.,  49.,   0.,   0.,   0.,   0.,  22.,  11.]]])

我將如何使用類似的技術(也沒有for循環)將零填充更改為以下內容:

array([[[  9.,   5.,  45.,   9.,   5.,   0.,   0.,   0.,   0.],
        [  9.,   9.,  25.,  18.,   9.,   0.,   0.,   0.,   0.]],

       [[ 10.,   6.,  60.,   0.,   0.,  10.,   6.,   0.,   0.],
        [ 10.,  10.,  36.,   0.,   0.,  20.,  10.,   0.,   0.]],

       [[ 11.,   7.,  77.,   0.,   0.,   0.,   0.,  11.,   7.],
        [ 11.,  11.,  49.,   0.,   0.,   0.,   0.,  22.,  11.]]])

在給定列索引的情況下,可以使用advanced-indexing將這些數組值分配為零初始化數組-

out = np.zeros((3,2,9),dtype=bool)
vals = np.array([[a,b,a*b,a,b],[a,a,b**2,2*a,a]])
out[np.arange(3)[:,None],:, idx] = vals.T

樣品運行-

In [448]: a
Out[448]: array([ 9, 10, 11])

In [449]: b
Out[449]: array([5, 6, 7])

In [450]: out
Out[450]: 
array([[[  9.,   5.,  45.,   9.,   5.,   0.,   0.,   0.,   0.],
        [  9.,   9.,  25.,  18.,   9.,   0.,   0.,   0.,   0.]],

       [[ 10.,   6.,  60.,   0.,   0.,  10.,   6.,   0.,   0.],
        [ 10.,  10.,  36.,   0.,   0.,  20.,  10.,   0.,   0.]],

       [[ 11.,   7.,  77.,   0.,   0.,   0.,   0.,  11.,   7.],
        [ 11.,  11.,  49.,   0.,   0.,   0.,   0.,  22.,  11.]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM