numpy数组:找不到如何转换数组

2024-06-25 05:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个numpy数组:bs。和len(b)==2*len(s)。你知道吗

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

为了提高速度,我想使用numpyapi做同样的事情,但是不能让某些东西工作。你知道吗

我应该使用什么numpy方法?你知道吗


Tags: 方法numpylen数组事情速度形式ix
2条回答

可能不是最聪明的解决方案,但您可以通过两个类似于this answer的过程来完成:

In [1]: import numpy as np

In [2]: s = np.array([1, 2] * 3)

In [3]: b = np.zeros(2 * s.size)

In [4]: b[2::4] = s[::2]

In [5]: b[3::4] = s[1::2]

In [6]: b
Out[6]: array([ 0.,  0.,  1.,  2.,  0.,  0.,  1.,  2.,  0.,  0.,  1.,  2.])

基于bs中的重复,我自动看到一个2d解决方案:

b = np.zeros(N,4)
b[:,2:] = s.reshape(N,2)
b = b.flatten()

或者将0附加到经过整形的s

b = np.hstack([np.zeros((10,2)),s.reshape(10,2)]).flatten()

或者如果我们想用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()

相关问题 更多 >