【问题标题】:How to convert a 2 1d arrays to one 1d arrays but both values should be inside one element如何将 2 个 1d 数组转换为 1 个 1d 数组,但两个值都应该在一个元素内
【发布时间】:2016-11-12 14:03:57
【问题描述】:

我真的不知道如何正确地表达这个,所以我提前道歉。 所以假设我有 2 个一维数组

array1 = [2000, 2100, 2800]
array2 =[20, 80, 40]

现在如何在 python 中将它们转换为二维数组,如下所示

2dArray = [[2000, 20], [2100, 80], [2800, 40]]

所以 2 个 id 数组在 python 中看起来像上面的那个。

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案1】:

    简单的 NumPy 解决方案 - np.array([...]).T:

    In [6]: np.array([a1, a2]).T
    Out[6]:
    array([[2000,   20],
           [2100,   80],
           [2800,   40]])
    

    另一个 NumPy 解决方案,它使用vstack() 方法:

    In [142]: np.vstack((array1, array2)).T
    Out[142]:
    array([[2000,   20],
           [2100,   80],
           [2800,   40]])
    

    或使用np.column_stack():

    In [144]: np.column_stack([array1, array2])
    Out[144]:
    array([[2000,   20],
           [2100,   80],
           [2800,   40]])
    

    另一个“慢”解决方案是使用内置的zip() 函数?

    In [131]: np.array(list(zip(array1, array2)))
    Out[131]:
    array([[2000,   20],
           [2100,   80],
           [2800,   40]])
    

    解释:

    In [132]: list(zip(array1, array2))
    Out[132]: [(2000, 20), (2100, 80), (2800, 40)]
    

    时序为两个 1M 元素数组:

    In [145]: a1 = np.random.randint(0, 10**6, 10**6)
    
    In [146]: a2 = np.random.randint(0, 10**6, 10**6)
    
    In [147]: a1.shape
    Out[147]: (1000000,)
    
    In [148]: a2.shape
    Out[148]: (1000000,)
    
    In [149]: %timeit np.array(list(zip(a1, a2)))
    1 loop, best of 3: 1.78 s per loop
    
    In [150]: %timeit np.vstack((a1, a2)).T
    100 loops, best of 3: 6.4 ms per loop
    
    In [151]: %timeit np.column_stack([a1, a2])
    100 loops, best of 3: 7.62 ms per loop
    
    In [14]: %timeit np.array([a1, a2]).T
    100 loops, best of 3: 6.36 ms per loop     # <--- WINNER!
    

    【讨论】:

    • 是的,非常感谢,请稍微解释一下,谢谢
    • 非常感谢!上帝保佑
    • @MaxU 有趣的是 - 我得到了相反的结果...... %timeit np.vstack((a1, a2)).T -> 100000 loops, best of 3: 14.4 µs per loop%timeit np.column_stack([a1, a2]) -> 100000 loops, best of 3: 11.4 µs per loop...
    • @JonClements,你的数组是什么形状的?
    • 哎呀-我没有在正确的阵列上运行它...我会尝试一下,看看我是否得到同样的错误...我们会假装我没有说任何事物? :p
    猜你喜欢
    • 2017-09-11
    • 2022-01-04
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多