Python numpy数组:找不到如何转换数组
我有两个numpy数组:b和s。和lenb==2*lens s的形式如下:Python numpy数组:找不到如何转换数组,python,arrays,numpy,Python,Arrays,Numpy,我有两个numpy数组:b和s。和lenb==2*lens s的形式如下: l r l r l r ... 我想把它转换成什么: 0 0 l r 0 0 l r 0 0 l r ... 我用简单的方法来做: ix = 0 jx = 0 while ix < len(b): b[ix] = 0 ix += 1 b[ix] = 0 ix += 1 b[ix] = s[jx] ix += 1 jx += 1 b[ix] = s
l r l r l r ...
我想把它转换成什么:
0 0 l r 0 0 l r 0 0 l r ...
我用简单的方法来做:
ix = 0
jx = 0
while ix < len(b):
b[ix] = 0
ix += 1
b[ix] = 0
ix += 1
b[ix] = s[jx]
ix += 1
jx += 1
b[ix] = s[jx]
ix += 1
jx += 1
为了提高速度,我想使用numpy api做同样的事情,但无法让某些东西正常工作
我应该使用什么numpy方法?可能不是最聪明的解决方案,但您可以通过两个步骤完成,类似于:
可能不是最聪明的解决方案,但您可以通过以下两个步骤完成:
基于b和s中的重复,我自动看到二维解决方案:
b = np.zeros(N,4)
b[:,2:] = s.reshape(N,2)
b = b.flatten()
或将0附加到重塑的s上:
或者如果我们想用3d来思考
np.einsum('ij,k->ikj',s.reshape(N,2),[0,1]).flatten()
广播也是一样
(s.reshape(10,2)[:,None,:]*np.array([0,1])[None,:,None]).flatten()
基于b和s中的重复,我自动看到二维解决方案:
b = np.zeros(N,4)
b[:,2:] = s.reshape(N,2)
b = b.flatten()
或将0附加到重塑的s上:
或者如果我们想用3d来思考
np.einsum('ij,k->ikj',s.reshape(N,2),[0,1]).flatten()
广播也是一样
(s.reshape(10,2)[:,None,:]*np.array([0,1])[None,:,None]).flatten()
有趣的解决方案!谢谢。有趣的解决方案!谢谢