繁体   English   中英

简化Python中偶数和不平坦点的两个numpy数组的合并

[英]Simplify merging of two numpy arrays at even and uneven points in Python

我编写了一个可以完成此任务的程序,但是它不是pythonic的,不是pythonic的,而且肯定不是很漂亮。

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

例如,list0和list1是输入

list0 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = [ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11]

输出应如下所示:

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

因此,基本上在输出的每个偶数点输入list0的数目,并在每个不均匀点输入list1的数目。

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

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;

现在,我想知道是否有更理想的,更Python化的,更快的方法来实现相同的目标?

被NumPy标记,这就是它的一个-

np.vstack((list0, list1)).ravel('F').tolist()

这里的ravel()使用F指定符按fortran顺序展平。

np.c_的较短版本,基本上将元素堆叠在列中-

np.c_[list0,list1].ravel().tolist()

这里的ravel()以默认的C顺序展平,因此在此跳过。

如果最终输出将保留为数组,请从方法中跳过.tolist()

好的itertools衬板

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]

您可以使用zip

>>> 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM