首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简化Python中偶数和不均匀点上两个numpy数组的合并

简化Python中偶数和不均匀点上两个numpy数组的合并
EN

Stack Overflow用户
提问于 2017-04-20 12:43:43
回答 3查看 80关注 0票数 1

我写了一个程序来做这个工作,但是它不是非常节奏曲,不是节奏曲,而且绝对不是美丽的。

程序必须以下列方式连接两个numpy数组:

例如,list0和list1是输入

代码语言:javascript
运行
复制
list0 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = [ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11]

输出应该如下所示:

代码语言:javascript
运行
复制
[0, 2, 1, 3, 2, 4, 3, 5, 4, 6, 5, 7, 6, 8, 7, 9, 8, 10, 9, 11]

所以基本上在输出的每一个偶数点上放进list0数,在每个不均匀点上放进list1数。

我对python相当陌生,所以我用C风格编写了它:

代码语言:javascript
运行
复制
import numpy as np



list0 = np.arange(10)
list1 = np.arange(2,12)

new = []
cnt0 = 0
cnt1 = 0
for i in range(0,2*len(list0)):
    if i % 2 == 0:
        new.append(list0[cnt0])
        cnt0 = cnt0 +1;
    else:
        new.append(list1[cnt1])
        cnt1 = cnt1 +1;

现在我想知道是否有一种更花哨的,更快的方式来达到同样的目标?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-20 12:46:44

在NumPy的标记下,这里有一个-

代码语言:javascript
运行
复制
np.vstack((list0, list1)).ravel('F').tolist()

这里的ravel()fortran顺序与F说明符一起扁平。

一个更短的np.c_版本,基本上是将元素堆叠在列中-

代码语言:javascript
运行
复制
np.c_[list0,list1].ravel().tolist()

这里的ravel()按默认的C顺序扁平,所以在这里跳过。

如果要将最后的输出保持为数组,请跳过方法中的.tolist()

票数 2
EN

Stack Overflow用户

发布于 2017-04-20 12:48:34

有迭代工具的一个不错的班轮

代码语言:javascript
运行
复制
from itertools import chain

chain(*zip(list0, list1))

[0, 2, 1, 3, 2, 4, 3, 5, 4, 6, 5, 7, 6, 8, 7, 9, 8, 10, 9, 11]
票数 1
EN

Stack Overflow用户

发布于 2017-04-20 12:49:14

您可以使用zip

代码语言:javascript
运行
复制
>>> output = [ data for elem in zip(list0,list1) for data in elem ]
[0, 2, 1, 3, 2, 4, 3, 5, 4, 6, 5, 7, 6, 8, 7, 9, 8, 10, 9, 11]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43519906

复制
相关文章

相似问题

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