首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3 Numpy数组与stride连接?

Python3 Numpy数组与stride连接?
EN

Stack Overflow用户
提问于 2020-01-05 07:36:39
回答 3查看 113关注 0票数 0

我有一些数组

代码语言:javascript
复制
x = np.empty(3)
y = np.empty(3)

for i in range(len(x)):
    x[i] = float(i)
    y[i] = float(i + 3)

print(x, y)

输出~ [0., 1., 2.], [3., 4., 5.]

我希望能够得到这个。

代码语言:javascript
复制
[0., 3., 1., 4., 2., 5.]

我该怎么做呢?

我尝试了zip,但这似乎创建了一个可迭代类,而不是传递给它的对象的新实例。

我试过np.concatenate(),但它似乎没有"stride“选项,这与我可能正在寻找的东西大致相同。(然而,在搜索中没有运气)

EN

回答 3

Stack Overflow用户

发布于 2020-01-05 07:38:09

您可以使用np.stack((x, y), axis=1).ravel()

票数 1
EN

Stack Overflow用户

发布于 2020-01-05 07:56:46

使用zip

代码语言:javascript
复制
np.ravel(list(zip(x,y)))

输出:

代码语言:javascript
复制
[0. 3. 1. 4. 2. 5.]

您可以通过将zip放入list构造函数中将其解包,然后使用numpy.ravel将其展平。

票数 0
EN

Stack Overflow用户

发布于 2020-01-05 15:15:07

在没有迭代的情况下创建数组:

代码语言:javascript
复制
In [157]: x = np.arange(3); y = np.arange(3, 6)                                 
In [158]: x, y                                                                  
Out[158]: (array([0, 1, 2]), array([3, 4, 5]))

我们可以使用以下命令将它们连接到一个二维数组中

代码语言:javascript
复制
In [159]: np.array((x,y))         # np.vstack also works                                              
Out[159]: 
array([[0, 1, 2],
       [3, 4, 5]])

然后,我们可以对2d数组进行ravel或扁平化。通过指定fortran顺序,我们可以获得您想要的交错效果:

代码语言:javascript
复制
In [160]: np.array((x,y)).ravel(order='F')                                      
Out[160]: array([0, 3, 1, 4, 2, 5])

使用默认的'c‘顺序:

代码语言:javascript
复制
In [161]: np.array((x,y)).ravel()                                               
Out[161]: array([0, 1, 2, 3, 4, 5])

另一种方法是将它们堆叠为列:

代码语言:javascript
复制
In [162]: np.stack((x,y),axis=1)                                                
Out[162]: 
array([[0, 3],
       [1, 4],
       [2, 5]])
In [163]: np.stack((x,y),axis=1).ravel()                                        
Out[163]: array([0, 3, 1, 4, 2, 5])

从压缩包中创建一个列表:

代码语言:javascript
复制
In [164]: list(zip(x,y))                                                        
Out[164]: [(0, 3), (1, 4), (2, 5)]

这个列表是组的;有一些方法可以扁平化这样的列表。但是我们也可以使用extend将元组连接到一个列表中:

代码语言:javascript
复制
In [165]: alist = []                                                            
In [166]: for i,j in zip(x,y): alist.extend((i,j))                              
In [167]: alist                                                                 
Out[167]: [0, 3, 1, 4, 2, 5]

vstackstackconcatenate的变体,以不同的方式调整数组的维数,然后在不同的轴上连接。

代码语言:javascript
复制
In [169]: np.concatenate((x[:,None], y[:,None]),axis=1)                         
Out[169]: 
array([[0, 3],
       [1, 4],
       [2, 5]])

另一种方式-连接行,并转置为列:

代码语言:javascript
复制
In [170]: np.array((x,y)).T                                                     
Out[170]: 
array([[0, 3],
       [1, 4],
       [2, 5]])

还有另一种方式-将数组插入到目标中,指定每隔一个步长:

代码语言:javascript
复制
In [171]: res = np.zeros(6,int)                                                 
In [172]: res[::2] = x; res[1::2] = y                                           
In [173]: res                                                                   
Out[173]: array([0, 3, 1, 4, 2, 5])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59595770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档