【问题标题】:Combining Three 1D arrays into a 2D array?将三个一维数组组合成一个二维数组?
【发布时间】:2017-10-12 17:09:56
【问题描述】:

我有三个形状为(250L,) 的numpy 数组,分别称为cIerror。我希望能够将三个数组保存到一个文本文件中,以便每个数组都是文件中的一列。到目前为止,我已经尝试了以下方法:

DataArray = np.concatenate((c,I,Error),axis=1)
np.savetxt('VaryingC.txt',DataArray)

这会返回一个错误,因为初始数组是一维的:

IndexError: 轴 1 超出范围 [0, 1)

如何将三个数组组合成一个形状(250,3) 数组?

【问题讨论】:

  • 你追求的是:np.column_stack((c,I,Error))?

标签: python arrays python-2.7 numpy concatenation


【解决方案1】:

concatenate 加入现有轴,stack 插入新轴:

DataArray = np.stack((c,I,Error),axis=1)

【讨论】:

    【解决方案2】:

    您似乎正在寻找:

    DataArray = np.column_stack((c,I,Error))
    

    时间:

    In [201]: a1 = np.random.randint(10**6, size=10**6)
    
    In [202]: a2 = np.random.randint(10**6, size=10**6)
    
    In [203]: a3 = np.random.randint(10**6, size=10**6)
    
    In [204]: %timeit np.column_stack((a1,a2,a3))
    100 loops, best of 3: 14.1 ms per loop
    
    In [205]: %timeit np.stack((a1,a2,a3),axis=1)
    100 loops, best of 3: 14.2 ms per loop
    
    In [206]: %timeit np.transpose([a1,a2,a3])
    100 loops, best of 3: 10.7 ms per loop
    

    【讨论】:

      【解决方案3】:

      在您的情况下,您可以创建一个新数组,然后转置它:

      np.transpose([c, I, Error])
      

      np.transpose 自动创建一个新数组,所以你不需要自己创建一个。

      例如:

      >>> import numpy as np
      
      >>> a = np.array([1, 1, 1, 1, 1])
      >>> b = np.array([2, 2, 2, 2, 2])
      >>> c = np.array([3, 3, 3, 3, 3])
      
      >>> DataArray = np.transpose([a, b, c])
      >>> DataArray
      array([[1, 2, 3],
             [1, 2, 3],
             [1, 2, 3],
             [1, 2, 3],
             [1, 2, 3]])
      
      >>> DataArray.shape
      (5, 3)
      

      【讨论】:

      • 您的解决方案似乎是提供的解决方案中最快的:)
      • @MaxU 感谢您安排时间!它是最快的并不让我感到惊讶:毕竟transpose 是最不通用的解决方案。值得注意的是,transpose 的结果是 F-contiguous,而 stackcolumn_stack 返回 C-contiguous 数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2021-10-29
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多